import { Controller, Delete, Get, HttpCode, Param, ParseUUIDPipe, Post, Body } from '@nestjs/common';
import { RequiresModule } from '../../common/access/requires-module.decorator';
import type { AuthenticatedUser } from '../../common/auth/authenticated-user';
import { CurrentUser } from '../../common/auth/current-user.decorator';
import { Roles } from '../../common/auth/roles.decorator';
import { AccountSharingService } from './account-sharing.service';
import { CreateAccountShareDto } from './dto/create-account-share.dto';

@Controller('account-sharing')
export class AccountSharingController {
  constructor(private readonly sharing: AccountSharingService) {}

  @Roles('ADMIN')
  @Get('admin/catalog')
  catalog() {
    return this.sharing.catalog();
  }

  @Roles('ADMIN')
  @Post('admin')
  create(@Body() input: CreateAccountShareDto, @CurrentUser() actor: AuthenticatedUser) {
    return this.sharing.create(input, actor);
  }

  @Roles('ADMIN')
  @Delete('admin/:id')
  @HttpCode(204)
  remove(@Param('id', ParseUUIDPipe) id: string) {
    return this.sharing.remove(id);
  }

  @RequiresModule('trading')
  @Get('me/trading')
  trading(@CurrentUser() user: AuthenticatedUser) {
    return this.sharing.listFor(user.id, 'trading');
  }

  @RequiresModule('portfolio')
  @Get('me/portfolio')
  portfolio(@CurrentUser() user: AuthenticatedUser) {
    return this.sharing.listFor(user.id, 'portfolio');
  }
}
