import { Controller, Get, Post, Body, Param, UseGuards, Request } from '@nestjs/common';
import { ApiTags, ApiBearerAuth, ApiOperation } from '@nestjs/swagger';
import { RequestsService } from './requests.service';
import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard';
import { IsString, IsInt, Min, Max, IsOptional, IsEnum } from 'class-validator';

class CreateRequestDto {
  @IsString() childId: string;
  @IsInt() @Min(5) @Max(120) requestedMin: number;
  @IsOptional() @IsString() reasonCode?: string;
  @IsOptional() @IsString() reason?: string;
}

class RespondRequestDto {
  @IsEnum(['approved', 'denied']) action: 'approved' | 'denied';
  @IsOptional() @IsInt() @Min(5) @Max(120) responseMin?: number;
  @IsOptional() @IsString() message?: string;
}

@ApiTags('requests')
@ApiBearerAuth()
@UseGuards(JwtAuthGuard)
@Controller({ path: 'requests', version: '1' })
export class RequestsController {
  constructor(private readonly service: RequestsService) {}

  @Post()
  @ApiOperation({ summary: 'Criar solicitação de tempo extra' })
  create(@Body() dto: CreateRequestDto) {
    return this.service.createRequest(dto.childId, dto.requestedMin, dto.reasonCode, dto.reason);
  }

  @Post(':id/respond')
  @ApiOperation({ summary: 'Responder solicitação (responsável)' })
  respond(@Param('id') id: string, @Body() dto: RespondRequestDto, @Request() req: any) {
    return this.service.respondToRequest(id, req.user.sub, dto.action, dto.responseMin, dto.message);
  }

  @Get('child/:childId')
  @ApiOperation({ summary: 'Solicitações da criança' })
  childRequests(@Param('childId') childId: string) {
    return this.service.getChildRequests(childId);
  }

  @Get('pending')
  @ApiOperation({ summary: 'Solicitações pendentes (para responsável)' })
  pending(@Request() req: any) {
    return this.service.getPendingRequestsForGuardian(req.user.sub);
  }
}
