import { Body, Controller, Delete, Get, Param, Post, Put, Query, Req } from '@nestjs/common';
import { ExtendedMasterService } from './extended-master.service';
import { Request } from 'express';

@Controller()
export class ExtendedMasterController {
  constructor(private svc: ExtendedMasterService) {}

  // Centers
  @Get('centers') listCenters(@Query('q') q: string, @Query('officeId') officeId: string) { return this.svc.listCenters(q, officeId); }
  @Post('centers') createCenter(@Body() dto: any) { return this.svc.createCenter(dto); }
  @Put('centers/:id') updateCenter(@Param('id') id: string, @Body() dto: any) { return this.svc.updateCenter(id, dto); }
  @Delete('centers/:id') deleteCenter(@Param('id') id: string) { return this.svc.deleteCenter(id); }

  // Groups
  @Get('groups') listGroups(@Query('q') q: string, @Query('officeId') officeId: string, @Query('centerId') centerId: string) { return this.svc.listGroups(q, officeId, centerId); }
  @Post('groups') createGroup(@Body() dto: any) { return this.svc.createGroup(dto); }
  @Put('groups/:id') updateGroup(@Param('id') id: string, @Body() dto: any) { return this.svc.updateGroup(id, dto); }
  @Delete('groups/:id') deleteGroup(@Param('id') id: string) { return this.svc.deleteGroup(id); }

  // Staff Positions
  @Get('staff-positions') listStaffPositions(@Query('q') q: string, @Query('officeId') officeId: string) { return this.svc.listStaffPositions(q, officeId); }
  @Post('staff-positions') createStaffPosition(@Body() dto: any) { return this.svc.createStaffPosition(dto); }
  @Put('staff-positions/:id') updateStaffPosition(@Param('id') id: string, @Body() dto: any) { return this.svc.updateStaffPosition(id, dto); }
  @Delete('staff-positions/:id') deleteStaffPosition(@Param('id') id: string) { return this.svc.deleteStaffPosition(id); }

  // Insurance
  @Get('insurance') listInsurance(@Query('q') q: string) { return this.svc.listInsurance(q); }
  @Post('insurance') createInsurance(@Body() dto: any) { return this.svc.createInsurance(dto); }
  @Put('insurance/:id') updateInsurance(@Param('id') id: string, @Body() dto: any) { return this.svc.updateInsurance(id, dto); }
  @Delete('insurance/:id') deleteInsurance(@Param('id') id: string) { return this.svc.deleteInsurance(id); }

  // Document Types
  @Get('document-types') listDocumentTypes(@Query('q') q: string, @Query('type') type: string) { return this.svc.listDocumentTypes(q, type); }
  @Post('document-types') createDocumentType(@Body() dto: any) { return this.svc.createDocumentType(dto); }
  @Put('document-types/:id') updateDocumentType(@Param('id') id: string, @Body() dto: any) { return this.svc.updateDocumentType(id, dto); }
  @Delete('document-types/:id') deleteDocumentType(@Param('id') id: string) { return this.svc.deleteDocumentType(id); }

  // Valuators
  @Get('valuators') listValuators(@Query('q') q: string) { return this.svc.listValuators(q); }
  @Post('valuators') createValuator(@Body() dto: any) { return this.svc.createValuator(dto); }
  @Put('valuators/:id') updateValuator(@Param('id') id: string, @Body() dto: any) { return this.svc.updateValuator(id, dto); }
  @Delete('valuators/:id') deleteValuator(@Param('id') id: string) { return this.svc.deleteValuator(id); }

  // Newspapers
  @Get('newspaper-publishes') listNewspapers(@Query('q') q: string) { return this.svc.listNewspapers(q); }
  @Post('newspaper-publishes') createNewspaper(@Body() dto: any) { return this.svc.createNewspaper(dto); }
  @Put('newspaper-publishes/:id') updateNewspaper(@Param('id') id: string, @Body() dto: any) { return this.svc.updateNewspaper(id, dto); }
  @Delete('newspaper-publishes/:id') deleteNewspaper(@Param('id') id: string) { return this.svc.deleteNewspaper(id); }

  // Business Units
  @Get('business-units') listBusinessUnits(@Query('q') q: string) { return this.svc.listBusinessUnits(q); }
  @Post('business-units') createBusinessUnit(@Body() dto: any) { return this.svc.createBusinessUnit(dto); }
  @Put('business-units/:id') updateBusinessUnit(@Param('id') id: string, @Body() dto: any) { return this.svc.updateBusinessUnit(id, dto); }
  @Delete('business-units/:id') deleteBusinessUnit(@Param('id') id: string) { return this.svc.deleteBusinessUnit(id); }

  // Departments
  @Get('departments') listDepartments(@Query('q') q: string) { return this.svc.listDepartments(q); }
  @Post('departments') createDepartment(@Body() dto: any) { return this.svc.createDepartment(dto); }
  @Put('departments/:id') updateDepartment(@Param('id') id: string, @Body() dto: any) { return this.svc.updateDepartment(id, dto); }
  @Delete('departments/:id') deleteDepartment(@Param('id') id: string) { return this.svc.deleteDepartment(id); }

  // Committee Groups
  @Get('committee-groups') listCommitteeGroups(@Query('q') q: string, @Query('officeId') officeId: string) { return this.svc.listCommitteeGroups(q, officeId); }
  @Post('committee-groups') createCommitteeGroup(@Body() dto: any) { return this.svc.createCommitteeGroup(dto); }
  @Put('committee-groups/:id') updateCommitteeGroup(@Param('id') id: string, @Body() dto: any) { return this.svc.updateCommitteeGroup(id, dto); }
  @Delete('committee-groups/:id') deleteCommitteeGroup(@Param('id') id: string) { return this.svc.deleteCommitteeGroup(id); }

  // Credit Analysis Titles + Options
  @Get('credit-analysis-titles') listTitles(@Query('officeId') officeId: string) { return this.svc.listCreditAnalysisTitles(officeId); }
  @Post('credit-analysis-titles') createTitle(@Body() dto: any) { return this.svc.createCreditAnalysisTitle(dto); }
  @Put('credit-analysis-titles/:id') updateTitle(@Param('id') id: string, @Body() dto: any) { return this.svc.updateCreditAnalysisTitle(id, dto); }
  @Delete('credit-analysis-titles/:id') deleteTitle(@Param('id') id: string) { return this.svc.deleteCreditAnalysisTitle(id); }
  @Post('credit-analysis-titles/:titleId/options') createOption(@Param('titleId') titleId: string, @Body() dto: any) { return this.svc.createCreditAnalysisOption(titleId, dto); }
  @Put('credit-analysis-options/:id') updateOption(@Param('id') id: string, @Body() dto: any) { return this.svc.updateCreditAnalysisOption(id, dto); }
  @Delete('credit-analysis-options/:id') deleteOption(@Param('id') id: string) { return this.svc.deleteCreditAnalysisOption(id); }
}
