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

class GenerateMissionDto {
  @IsString() subject: string;
  @IsString() topic: string;
  @IsOptional() @IsInt() ageYears?: number;
  @IsOptional() @IsInt() @Min(1) @Max(5) difficultyLevel?: number;
  @IsOptional() @IsInt() @Min(1) @Max(10) numQuestions?: number;
}

class TutorHintDto {
  @IsString() questionId: string;
  @IsString() childId: string;
  @IsOptional() @IsArray() history?: any[];
}

@ApiTags('learning')
@ApiBearerAuth()
@UseGuards(JwtAuthGuard)
@Controller({ path: 'learning', version: '1' })
export class LearningController {
  constructor(private readonly service: LearningService) {}

  @Post('generate-mission')
  @ApiOperation({ summary: 'Gerar missão com IA (ficará em draft para revisão)' })
  generateMission(@Body() dto: GenerateMissionDto, @Request() req: any) {
    return this.service.generateMissionWithAi(dto, req.user.sub);
  }

  @Patch('missions/:id/publish')
  @ApiOperation({ summary: 'Publicar missão gerada por IA' })
  publishMission(@Param('id') id: string) {
    return this.service.publishMission(id);
  }

  @Post('tutor/hint')
  @ApiOperation({ summary: 'Dica do tutor IA para uma questão' })
  tutorHint(@Body() dto: TutorHintDto) {
    return this.service.getTutorHint(dto.questionId, dto.childId, dto.history ?? []);
  }

  @Get('recommendations/:childId')
  @ApiOperation({ summary: 'Missões recomendadas para a criança' })
  recommendations(@Param('childId') childId: string) {
    return this.service.getRecommendations(childId);
  }
}
