/**
 * Account Management - IntegratedDetailTemplate Config
 *
 * 계좌관리 등록/상세/수정 페이지 설정
 */

import { Landmark } from 'lucide-react';
import type { DetailConfig } from '@/components/templates/IntegratedDetailTemplate';
import type { Account, AccountFormData, AccountStatus } from './types';
import { BANK_OPTIONS, ACCOUNT_STATUS_OPTIONS, BANK_LABELS } from './types';

export const accountConfig: DetailConfig<Account> = {
  title: '계좌',
  description: '계좌 정보를 관리합니다',
  icon: Landmark,
  basePath: '/settings/accounts',

  // 그리드 2열
  gridColumns: 2,

  // 필드 정의
  fields: [
    {
      key: 'bankCode',
      label: '은행',
      type: 'select',
      required: true,
      options: BANK_OPTIONS,
      placeholder: '은행 선택',
    },
    {
      key: 'accountNumber',
      label: '계좌번호',
      type: 'accountNumber',
      required: true,
      placeholder: '0000-0000-0000-0000',
      // 수정 모드에서 비활성화 (계좌번호 변경 불가)
      disabled: (mode) => mode === 'edit',
    },
    {
      key: 'accountHolder',
      label: '예금주',
      type: 'text',
      required: true,
      placeholder: '예금주명',
    },
    {
      key: 'accountPassword',
      label: '계좌 비밀번호 (빠른 조회 서비스)',
      type: 'password',
      placeholder: '****',
      helpText: '빠른 조회 서비스 이용 시 필요합니다',
      // view 모드에서는 **** 로 표시됨 (FieldRenderer 기본 동작)
    },
    {
      key: 'accountName',
      label: '계좌명',
      type: 'text',
      placeholder: '계좌명을 입력해주세요',
    },
    {
      key: 'status',
      label: '상태',
      type: 'select',
      required: true,
      options: ACCOUNT_STATUS_OPTIONS,
      placeholder: '상태 선택',
    },
  ],

  // 액션 설정
  actions: {
    showDelete: true,
    showEdit: true,
    showBack: true,
    deleteConfirmMessage: {
      title: '계좌 삭제',
      description: '계좌를 정말 삭제하시겠습니까?\n삭제된 계좌의 과거 사용 내역은 보존됩니다.',
    },
  },

  // 초기 데이터 변환 (API 응답 → formData)
  transformInitialData: (account: Account): Record<string, unknown> => ({
    bankCode: account.bankCode || '',
    bankName: account.bankName || '',
    accountNumber: account.accountNumber || '',
    accountName: account.accountName || '',
    accountHolder: account.accountHolder || '',
    accountPassword: '', // 비밀번호는 항상 빈 값
    status: account.status || 'active',
  }),

  // 제출 데이터 변환 (formData → API 요청)
  transformSubmitData: (formData: Record<string, unknown>): Partial<AccountFormData> => ({
    bankCode: formData.bankCode as string,
    bankName: BANK_LABELS[formData.bankCode as string] || (formData.bankCode as string),
    accountNumber: formData.accountNumber as string,
    accountName: formData.accountName as string,
    accountHolder: formData.accountHolder as string,
    status: formData.status as AccountStatus,
  }),
};
