"use client";

import { ComponentConfig } from "@/types/component";
import type { ApprovalLine, ApprovalRequest } from "@/lib/api/approval";

/**
 * ApprovalStep 컴포넌트 설정 타입
 * 결재 단계를 시각적으로 표시하는 컴포넌트
 */
export interface ApprovalStepConfig extends ComponentConfig {
  targetTable?: string;
  targetRecordIdField?: string;
  displayMode?: "horizontal" | "vertical";
  showComment?: boolean;
  showTimestamp?: boolean;
  showDept?: boolean;
  compact?: boolean;
}

/**
 * 결재 라인 확장 타입 (v2 마이그레이션 필드 포함)
 * DB에 step_type, proxy_for, proxy_reason, is_required 컬럼 추가됨
 */
export interface ExtendedApprovalLine extends ApprovalLine {
  step_type?: "approval" | "consensus" | "notification";
  proxy_for?: string | null;
  proxy_reason?: string | null;
  is_required?: boolean;
}

/**
 * 결재 요청 확장 타입 (v2 마이그레이션 필드 포함)
 * DB에 approval_type, is_post_approved, urgency 컬럼 추가됨
 */
export interface ExtendedApprovalRequest extends ApprovalRequest {
  approval_type?: "self" | "escalation" | "consensus" | "post";
  is_post_approved?: boolean;
  urgency?: "normal" | "urgent" | "critical";
}

/**
 * step_order 기준으로 그룹핑된 결재 단계
 * 합의결재 시 같은 step_order에 여러 결재자가 존재
 */
export interface StepGroup {
  stepOrder: number;
  lines: ExtendedApprovalLine[];
  stepType: "approval" | "consensus" | "notification";
}
