import { Body, Controller, Delete, Get, Param, Post, Put, Request } from '@nestjs/common';
import { MemberExtendedService } from './member-extended.service';
import { RequirePermissions } from '../../common/decorators/permissions.decorator';

@Controller('members/:memberId/extended')
export class MemberExtendedController {
  constructor(private svc: MemberExtendedService) {}

  @Get('profile')
  @RequirePermissions('members.view')
  getProfile(@Request() req: any, @Param('memberId') memberId: string) {
    return this.svc.getMemberFullProfile(req.tenant, memberId);
  }

  @Get('incomes')
  @RequirePermissions('members.view')
  getIncomes(@Request() req: any, @Param('memberId') memberId: string) {
    return this.svc.getIncomes(req.tenant, memberId);
  }

  @Post('incomes')
  @RequirePermissions('members.update')
  addIncome(@Request() req: any, @Param('memberId') memberId: string, @Body() body: any) {
    return this.svc.addIncome(req.tenant, memberId, body);
  }

  @Post('incomes/bulk')
  @RequirePermissions('members.update')
  bulkIncomes(@Request() req: any, @Param('memberId') memberId: string, @Body() body: { items: any[] }) {
    return this.svc.bulkSaveIncomes(req.tenant, memberId, body.items);
  }

  @Put('incomes/:id')
  @RequirePermissions('members.update')
  updateIncome(@Request() req: any, @Param('id') id: string, @Body() body: any) {
    return this.svc.updateIncome(req.tenant, id, body);
  }

  @Delete('incomes/:id')
  @RequirePermissions('members.update')
  deleteIncome(@Request() req: any, @Param('id') id: string) {
    return this.svc.deleteIncome(req.tenant, id);
  }

  @Get('business-incomes')
  @RequirePermissions('members.view')
  getBusinessIncomes(@Request() req: any, @Param('memberId') memberId: string) {
    return this.svc.getBusinessIncomes(req.tenant, memberId);
  }

  @Post('business-incomes')
  @RequirePermissions('members.update')
  addBusinessIncome(@Request() req: any, @Param('memberId') memberId: string, @Body() body: any) {
    return this.svc.addBusinessIncome(req.tenant, memberId, body);
  }

  @Post('business-incomes/bulk')
  @RequirePermissions('members.update')
  bulkBusinessIncomes(@Request() req: any, @Param('memberId') memberId: string, @Body() body: { items: any[] }) {
    return this.svc.bulkSaveBusinessIncomes(req.tenant, memberId, body.items);
  }

  @Put('business-incomes/:id')
  @RequirePermissions('members.update')
  updateBusinessIncome(@Request() req: any, @Param('id') id: string, @Body() body: any) {
    return this.svc.updateBusinessIncome(req.tenant, id, body);
  }

  @Delete('business-incomes/:id')
  @RequirePermissions('members.update')
  deleteBusinessIncome(@Request() req: any, @Param('id') id: string) {
    return this.svc.deleteBusinessIncome(req.tenant, id);
  }

  @Get('financials')
  @RequirePermissions('members.view')
  getFinancials(@Request() req: any, @Param('memberId') memberId: string) {
    return this.svc.getFinancials(req.tenant, memberId);
  }

  @Post('financials')
  @RequirePermissions('members.update')
  addFinancial(@Request() req: any, @Param('memberId') memberId: string, @Body() body: any) {
    return this.svc.addFinancial(req.tenant, memberId, body);
  }

  @Post('financials/bulk')
  @RequirePermissions('members.update')
  bulkFinancials(@Request() req: any, @Param('memberId') memberId: string, @Body() body: { items: any[] }) {
    return this.svc.bulkSaveFinancials(req.tenant, memberId, body.items);
  }

  @Put('financials/:id')
  @RequirePermissions('members.update')
  updateFinancial(@Request() req: any, @Param('id') id: string, @Body() body: any) {
    return this.svc.updateFinancial(req.tenant, id, body);
  }

  @Delete('financials/:id')
  @RequirePermissions('members.update')
  deleteFinancial(@Request() req: any, @Param('id') id: string) {
    return this.svc.deleteFinancial(req.tenant, id);
  }
}
