import { IsString, IsEnum, IsOptional, IsDateString, IsObject } from 'class-validator';

/**
 * 审批完成回调 DTO
 * 由审批流引擎调用
 */
export class ApprovalCompletedCallbackDto {
  @IsString()
  approvalInstanceId: string;

  @IsString()
  businessType: string;

  @IsString()
  businessId: string; // FormInstance.id

  @IsEnum(['RUNNING', 'SUSPENDED', 'COMPLETED', 'TERMINATED'])
  status: string;

  @IsOptional()
  @IsString()
  endReason?: string; // APPROVED, REJECTED, WITHDRAWN, ERROR

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

  @IsOptional()
  @IsDateString()
  endTime?: string;

  @IsOptional()
  @IsObject()
  variables?: Record<string, any>;
}

/**
 * 查询审批状态响应 DTO
 */
export class FormApprovalStatusDto {
  formInstance: {
    id: string;
    formKey: string;
    formName: string;
    status: string;
    submittedBy?: {
      id: string;
      displayName: string;
    };
    submittedAt?: Date;
  };

  approval?: {
    id: string;
    status: string;
    currentNode?: string;
    startTime: Date;
    endTime?: Date;
  } | null;

  currentTasks: Array<{
    id: string;
    name: string;
    assignee?: string;
    status: string;
    createTime: Date;
  }>;

  history: Array<{
    id: string;
    taskName: string;
    action: string;
    actorId?: string;
    comment?: string;
    timestamp: Date;
  }>;
}

