import { Type } from 'class-transformer';
import { IsBoolean, IsIn, IsInt, IsNumber, IsOptional, IsString, Min } from 'class-validator';

export class ManualTriggerDto {
  @IsOptional()
  @IsString()
  fromTime?: string;

  @IsOptional()
  @IsString()
  toTime?: string;

  @IsOptional()
  @IsString()
  userId?: string;
}

export class PaginationQueryDto {
  @IsOptional()
  @IsString()
  page?: string;

  @IsOptional()
  @IsString()
  limit?: string;
}

export class ExecutionQueryDto extends PaginationQueryDto {
  @IsOptional()
  @IsString()
  taskCode?: string;

  @IsOptional()
  @IsString()
  startDate?: string;

  @IsOptional()
  @IsString()
  endDate?: string;

  @IsOptional()
  @IsString()
  hideEmpty?: string;
}

export class ApprovalCancellationDto {
  @IsString()
  @IsIn(['DINGTALK_BUSINESS_TRIP', 'DINGTALK_FIELD_APPLICATION', 'DINGTALK_OVERTIME'])
  taskCode!: 'DINGTALK_BUSINESS_TRIP' | 'DINGTALK_FIELD_APPLICATION' | 'DINGTALK_OVERTIME';

  @IsString()
  userId!: string;

  @IsString()
  approveId!: string;

  @IsOptional()
  @IsString()
  fromTime?: string;

  @IsOptional()
  @IsString()
  toTime?: string;

  @IsOptional()
  @IsBoolean()
  dryRun?: boolean;
}

export class AnnualLeavePlanSettingsQueryDto {
  @IsString()
  userId!: string;

  @IsOptional()
  @Type(() => Number)
  @IsInt()
  @Min(2000)
  year?: number;
}

export class UpdateAnnualLeaveQuotaDto {
  @IsString()
  userId!: string;

  @Type(() => Number)
  @IsInt()
  @Min(2000)
  year!: number;

  @Type(() => Number)
  @IsNumber({ maxDecimalPlaces: 1 })
  @Min(0)
  totalDays!: number;
}

export class UpdateAnnualLeavePlanSettingsDto {
  @IsString()
  userId!: string;

  @Type(() => Number)
  @IsInt()
  @Min(2000)
  year!: number;

  @IsOptional()
  @Type(() => Number)
  @IsNumber({ maxDecimalPlaces: 2 })
  adjustmentDays?: number;

  @IsOptional()
  @Type(() => Number)
  @IsInt()
  notCountDays?: number;

  @IsOptional()
  @Type(() => Boolean)
  @IsBoolean()
  recalculate?: boolean;
}
