import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsIn, IsOptional, IsString, MaxLength, MinLength } from 'class-validator';

export class CrearSesionDto {
  @ApiPropertyOptional()
  @IsOptional()
  @IsString()
  @MaxLength(200)
  titulo?: string;
}

export class PreguntarDto {
  @ApiProperty()
  @IsString()
  @MinLength(2)
  @MaxLength(2000)
  pregunta!: string;

  @ApiPropertyOptional({ description: 'Clave de pantalla actual (ej: tesoreria/cheques)' })
  @IsOptional()
  @IsString()
  @MaxLength(150)
  screen_key?: string;

  @ApiPropertyOptional({ description: 'URL actual del navegador, para contexto' })
  @IsOptional()
  @IsString()
  @MaxLength(300)
  screen_url?: string;

  @ApiPropertyOptional({ description: 'Código de módulo raíz de la pantalla actual (ej: TESORERIA)' })
  @IsOptional()
  @IsString()
  @MaxLength(40)
  screen_modulo?: string;

  @ApiPropertyOptional({ description: 'Código de submódulo de la pantalla actual (ej: TES_CHEQUES)' })
  @IsOptional()
  @IsString()
  @MaxLength(60)
  screen_submodulo?: string;
}

export class FeedbackDto {
  @ApiProperty({ enum: ['up', 'down'] })
  @IsIn(['up', 'down'])
  feedback!: 'up' | 'down';
}

export class RunIngestaDto {
  @ApiPropertyOptional({ enum: ['docs', 'guias', 'all'], default: 'all' })
  @IsOptional()
  @IsIn(['docs', 'guias', 'all'])
  source?: 'docs' | 'guias' | 'all';

  @ApiPropertyOptional({ default: false })
  @IsOptional()
  force?: boolean;

  @ApiPropertyOptional({
    default: false,
    description: 'Si true, no escribe en BD ni invoca LLM/embeddings. Solo reporta qué haría.',
  })
  @IsOptional()
  dry_run?: boolean;
}
