/**
 * 급여관리 타입 정의
 */

// 급여 상태 타입
export type PaymentStatus = 'scheduled' | 'completed';

// 정렬 옵션 타입
export type SortOption = 'rank' | 'name' | 'department' | 'paymentDate';

// 급여 레코드 인터페이스
export interface SalaryRecord {
  id: string;
  employeeId: string;
  employeeName: string;
  department: string;
  position: string;
  rank: string;
  baseSalary: number;          // 기본급
  allowance: number;           // 수당
  overtime: number;            // 초과근무
  bonus: number;               // 상여
  deduction: number;           // 공제
  netPayment: number;          // 실지급액
  paymentDate: string;         // 지급일
  status: PaymentStatus;       // 상태
  year: number;                // 년도
  month: number;               // 월
  createdAt: string;
  updatedAt: string;
}

// 급여 상세 정보 인터페이스
export interface SalaryDetail {
  // 기본 정보
  employeeId: string;
  employeeName: string;
  department: string;
  position: string;
  rank: string;

  // 급여 정보
  baseSalary: number;          // 본봉

  // 수당 내역
  allowances: {
    positionAllowance: number;    // 직책수당
    overtimeAllowance: number;    // 초과근무수당
    mealAllowance: number;        // 식대
    transportAllowance: number;   // 교통비
    otherAllowance: number;       // 기타수당
  };

  // 공제 내역
  deductions: {
    nationalPension: number;      // 국민연금
    healthInsurance: number;      // 건강보험
    longTermCare: number;         // 장기요양보험
    employmentInsurance: number;  // 고용보험
    incomeTax: number;            // 소득세
    localIncomeTax: number;       // 지방소득세
    otherDeduction: number;       // 기타공제
  };

  // 합계
  totalAllowance: number;      // 수당 합계
  totalDeduction: number;      // 공제 합계
  netPayment: number;          // 실지급액

  // 추가 정보
  paymentDate: string;
  status: PaymentStatus;
  year: number;
  month: number;
}

// 상태 라벨
export const PAYMENT_STATUS_LABELS: Record<PaymentStatus, string> = {
  scheduled: '지급예정',
  completed: '지급완료',
};

// 상태 색상
export const PAYMENT_STATUS_COLORS: Record<PaymentStatus, string> = {
  scheduled: 'bg-blue-100 text-blue-800',
  completed: 'bg-green-100 text-green-800',
};

// 정렬 옵션 라벨
export const SORT_OPTIONS: Record<SortOption, string> = {
  rank: '직급순',
  name: '이름순',
  department: '부서순',
  paymentDate: '지급일순',
};

// 금액 포맷 유틸리티
export const formatCurrency = (amount: number): string => {
  return new Intl.NumberFormat('ko-KR').format(amount);
};