import { Body, Controller, Delete, Get, Param, Post, Request } from '@nestjs/common';
import { ApplicationWorkflowService } from './application-workflow.service';
import { RequirePermissions } from '../../common/decorators/permissions.decorator';

@Controller('applications/:applicationId/workflow')
export class ApplicationWorkflowController {
  constructor(private svc: ApplicationWorkflowService) {}

  @Get('timeline')
  @RequirePermissions('applications.view')
  getTimeline(@Request() req: any, @Param('applicationId') appId: string) {
    return this.svc.getTimeline(req.tenant, appId);
  }

  @Get('comments')
  @RequirePermissions('applications.view')
  getComments(@Request() req: any, @Param('applicationId') appId: string) {
    return this.svc.getComments(req.tenant, appId);
  }

  @Post('comments')
  @RequirePermissions('applications.create')
  addComment(@Request() req: any, @Param('applicationId') appId: string, @Body() body: any) {
    return this.svc.addComment(req.tenant, appId, body, req.user?.sub, req.user?.name);
  }

  @Delete('comments/:id')
  @RequirePermissions('applications.delete')
  deleteComment(@Request() req: any, @Param('applicationId') appId: string, @Param('id') id: string) {
    return this.svc.deleteComment(req.tenant, appId, id);
  }

  @Get('status-history')
  @RequirePermissions('applications.view')
  getStatusHistory(@Request() req: any, @Param('applicationId') appId: string) {
    return this.svc.getStatusHistory(req.tenant, appId);
  }

  @Post('change-status')
  @RequirePermissions('applications.update')
  changeStatus(@Request() req: any, @Param('applicationId') appId: string, @Body() body: { status: string; comment?: string }) {
    return this.svc.changeStatus(req.tenant, appId, body.status, body.comment, req.user?.sub, req.user?.name);
  }

  @Get('recommendations')
  @RequirePermissions('applications.view')
  getRecommendations(@Request() req: any, @Param('applicationId') appId: string) {
    return this.svc.getRecommendations(req.tenant, appId);
  }

  @Post('recommendations')
  @RequirePermissions('applications.create')
  addRecommendation(@Request() req: any, @Param('applicationId') appId: string, @Body() body: any) {
    return this.svc.addRecommendation(req.tenant, appId, body, req.user?.sub, req.user?.name);
  }

  @Delete('recommendations/:id')
  @RequirePermissions('applications.delete')
  deleteRecommendation(@Request() req: any, @Param('applicationId') appId: string, @Param('id') id: string) {
    return this.svc.deleteRecommendation(req.tenant, appId, id);
  }

  @Get('forwards')
  @RequirePermissions('applications.view')
  getForwards(@Request() req: any, @Param('applicationId') appId: string) {
    return this.svc.getForwards(req.tenant, appId);
  }

  @Post('forwards')
  @RequirePermissions('applications.create')
  addForward(@Request() req: any, @Param('applicationId') appId: string, @Body() body: any) {
    return this.svc.addForward(req.tenant, appId, body, req.user?.sub, req.user?.name);
  }
}
