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

export class CreateEmpleadoDto {
  @ApiPropertyOptional({
    description:
      'Identificador legible del empleado dentro de la empresa. Si se omite, se autogenera como el siguiente entero secuencial.',
  })
  @IsOptional()
  @IsString()
  @Length(1, 20)
  numero_empleado?: string;

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

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

  @ApiProperty()
  @IsString()
  @Length(1, 20)
  cedula_identidad!: string;

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

  @ApiProperty()
  @IsDateString()
  fecha_nacimiento!: string;

  @ApiProperty({ enum: ['M', 'F', 'O'] })
  @IsString()
  @IsIn(['M', 'F', 'O'])
  sexo!: string;

  @ApiProperty()
  @IsString()
  @Length(1, 20)
  estado_civil!: string;

  @ApiPropertyOptional({ default: 0 })
  @IsOptional()
  @IsInt()
  @Min(0)
  cantidad_hijos?: number;

  @ApiPropertyOptional()
  @IsOptional()
  @IsEmail()
  email?: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsString()
  @Length(1, 30)
  telefono?: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsString()
  direccion?: string;

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

  @ApiProperty()
  @IsUUID()
  sucursal_id!: string;

  @ApiProperty()
  @IsUUID()
  departamento_id!: string;

  @ApiProperty()
  @IsUUID()
  cargo_id!: string;

  @ApiProperty()
  @IsUUID()
  centro_costo_id!: string;

  @ApiProperty()
  @IsUUID()
  tipo_empleado_id!: string;

  @ApiProperty()
  @IsDateString()
  fecha_ingreso!: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsDateString()
  fecha_egreso?: string;

  @ApiProperty()
  @IsNumber()
  @Min(0)
  salario_base!: number;

  @ApiProperty({ enum: ['MENSUAL', 'JORNAL', 'COMISION'] })
  @IsString()
  @IsIn(['MENSUAL', 'JORNAL', 'COMISION'])
  tipo_salario!: string;

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

  @ApiPropertyOptional()
  @IsOptional()
  @IsString()
  @Length(1, 30)
  cuenta_bancaria?: string;

  @ApiPropertyOptional({ enum: ['CAJA_AHORRO', 'CUENTA_CORRIENTE'] })
  @IsOptional()
  @IsString()
  @IsIn(['CAJA_AHORRO', 'CUENTA_CORRIENTE'])
  tipo_cuenta?: string;

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

  @ApiPropertyOptional({ default: true })
  @IsOptional()
  @IsBoolean()
  aporta_ips?: boolean;

  @ApiPropertyOptional({ default: 'GENERAL', enum: ['GENERAL', 'MICROEMPRESA_80', 'DOMESTICO', 'EXENTO'] })
  @IsOptional()
  @IsString()
  @IsIn(['GENERAL', 'MICROEMPRESA_80', 'DOMESTICO', 'EXENTO'])
  regimen_ips?: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsString()
  observaciones?: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsString()
  @Length(1, 255)
  foto_url?: string;
}
