import { IsBoolean, IsIn, IsInt, IsOptional, IsString, IsUrl, Length, Matches, Max, Min } from 'class-validator';

export class RegisterCafeCompanionAgentDto {
  @IsString({ message: '服务点ID必须是字符串' })
  @Length(1, 80, { message: '服务点ID长度需在1-80字符之间' })
  @Matches(/^[A-Za-z0-9_:-]+$/, { message: '服务点ID格式不正确' })
  service_point_id!: string;

  @IsString({ message: '人设名称必须是字符串' })
  @Length(1, 80, { message: '人设名称长度需在1-80字符之间' })
  persona_name!: string;

  @IsOptional()
  @IsIn(['openai', 'anthropic'], { message: '代理协议必须是 openai 或 anthropic' })
  protocol?: 'openai' | 'anthropic';

  @IsUrl({ require_tld: false }, { message: '接口URL格式不正确' })
  @Length(1, 240, { message: '接口URL长度需在1-240字符之间' })
  base_url!: string;

  @IsString({ message: '接口Token必须是字符串' })
  @Length(1, 2000, { message: '接口Token长度需在1-2000字符之间' })
  token!: string;

  @IsString({ message: '模型名称必须是字符串' })
  @Length(1, 120, { message: '模型名称长度需在1-120字符之间' })
  model!: string;

  @IsString({ message: '人设指令必须是字符串' })
  @Length(1, 4000, { message: '人设指令长度需在1-4000字符之间' })
  persona_prompt!: string;

  @IsOptional()
  @IsString({ message: '欢迎语必须是字符串' })
  @Length(0, 300, { message: '欢迎语不能超过300字符' })
  welcome_message?: string;

  @IsOptional()
  @IsBoolean({ message: '启用状态必须是布尔值' })
  enabled?: boolean;

  @IsInt({ message: '打工时间必须是整数分钟' })
  @Min(30, { message: '打工时间不能少于30分钟' })
  @Max(480, { message: '打工时间不能超过8小时' })
  employment_minutes!: number;
}
