import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsBoolean, IsNumber, IsOptional, IsString, IsUUID, Length, Min } from 'class-validator';

export class UpsertCargoDto {
  @ApiPropertyOptional()
  @IsOptional()
  @IsString()
  @Length(1, 20)
  codigo?: string;

  @ApiProperty()
  @IsString()
  @Length(1, 100)
  nombre!: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsNumber()
  @Min(0)
  salario_minimo_cargo?: number;

  @ApiPropertyOptional()
  @IsOptional()
  @IsNumber()
  @Min(0)
  salario_maximo_cargo?: number;

  @ApiPropertyOptional()
  @IsOptional()
  @IsBoolean()
  activo?: boolean;
}

export class UpsertCentroCostoDto {
  @ApiProperty()
  @IsString()
  @Length(1, 20)
  codigo!: string;

  // El centro de costo es compartido con Contabilidad (tabla cont_centros_costo,
  // donde el campo es `descripcion`). Acá se mantiene `nombre` por compatibilidad
  // con el frontend de RRHH; el service lo mapea a `descripcion`.
  @ApiProperty()
  @IsString()
  @Length(1, 100)
  nombre!: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsBoolean()
  activo?: boolean;
}

export class UpsertDepartamentoDto {
  @ApiProperty()
  @IsUUID()
  sucursal_id!: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsString()
  @Length(1, 20)
  codigo?: string;

  @ApiProperty()
  @IsString()
  @Length(1, 100)
  nombre!: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsUUID()
  responsable_empleado_id?: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsBoolean()
  activo?: boolean;
}

export class UpsertTipoEmpleadoDto {
  @ApiProperty()
  @IsString()
  @Length(1, 40)
  codigo!: string;

  @ApiProperty()
  @IsString()
  @Length(1, 100)
  nombre!: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsBoolean()
  recibe_aguinaldo?: boolean;

  @ApiPropertyOptional()
  @IsOptional()
  @IsBoolean()
  activo?: boolean;
}
