// 출고기준관리 설정
// 출고관리 > 출하관리에 필요한 기준 데이터 정의

// MasterConfigurationManager 호환 형식
const outboundMasterConfig = {
  id: 'outbound',
  title: '출고기준 관리',
  description: '출고/출하 프로세스에 필요한 기준 데이터를 관리합니다',
  icon: 'Truck',
  tabs: [
    { id: 'hierarchy', label: '계층구조', icon: 'GitBranch' },
    { id: 'section', label: '섹션', icon: 'Layers' },
    { id: 'field', label: '항목', icon: 'ClipboardList' },
    { id: 'attribute', label: '속성', icon: 'Settings' },
  ],
  // 출고기준 유형
  entityTypes: [
    { id: 1, code: 'DM', name: '배송방법', description: '배송방법 관리', sortOrder: 1, isActive: true },
    { id: 2, code: 'CR', name: '배송업체', description: '배송업체 관리', sortOrder: 2, isActive: true },
    { id: 3, code: 'SS', name: '출하상태', description: '출하상태 관리', sortOrder: 3, isActive: true },
    { id: 4, code: 'PK', name: '포장기준', description: '포장기준 관리', sortOrder: 4, isActive: true },
    { id: 5, code: 'VH', name: '차량/운송', description: '차량/운송 관리', sortOrder: 5, isActive: true },
    { id: 6, code: 'SD', name: '출하문서', description: '출하문서 설정', sortOrder: 6, isActive: true },
  ],
  // 카테고리 (출고 프로세스별 분류)
  categories: [
    { id: 1, code: 'DELIVERY', name: '배송관리', parentId: null, level: 1, path: '/1', sortOrder: 1 },
    { id: 2, code: 'SELF', name: '자가배송', parentId: 1, level: 2, path: '/1/2', sortOrder: 1 },
    { id: 3, code: 'FREIGHT', name: '화물배송', parentId: 1, level: 2, path: '/1/3', sortOrder: 2 },
    { id: 4, code: 'EXPRESS', name: '택배배송', parentId: 1, level: 2, path: '/1/4', sortOrder: 3 },
    { id: 5, code: 'VEHICLE', name: '차량관리', parentId: null, level: 1, path: '/5', sortOrder: 2 },
    { id: 6, code: 'DOCUMENT', name: '문서관리', parentId: null, level: 1, path: '/6', sortOrder: 3 },
  ],
  // 통합 필드 정의
  masterFields: [
    // 배송방법 필드
    { id: 1, fieldKey: 'deliveryCode', fieldName: '배송코드', inputType: 'text', isRequired: true, description: '배송방법 코드' },
    { id: 2, fieldKey: 'deliveryName', fieldName: '배송방법명', inputType: 'text', isRequired: true, description: '배송방법 이름' },
    { id: 3, fieldKey: 'deliveryDescription', fieldName: '설명', inputType: 'textarea', isRequired: false, description: '배송방법 설명' },
    { id: 4, fieldKey: 'isActive', fieldName: '사용여부', inputType: 'checkbox', isRequired: true, description: '사용 여부' },
    // 배송업체 필드
    { id: 5, fieldKey: 'carrierCode', fieldName: '업체코드', inputType: 'text', isRequired: true, description: '배송업체 코드' },
    { id: 6, fieldKey: 'carrierName', fieldName: '업체명', inputType: 'text', isRequired: true, description: '배송업체 이름' },
    { id: 7, fieldKey: 'carrierType', fieldName: '업체유형', inputType: 'select', isRequired: true, options: { items: ['택배', '화물', '특수화물'] }, description: '업체 유형' },
    { id: 8, fieldKey: 'contact', fieldName: '연락처', inputType: 'text', isRequired: false, description: '연락처' },
    { id: 9, fieldKey: 'address', fieldName: '주소', inputType: 'text', isRequired: false, description: '주소' },
    // 출하상태 필드
    { id: 10, fieldKey: 'statusCode', fieldName: '상태코드', inputType: 'text', isRequired: true, description: '출하상태 코드' },
    { id: 11, fieldKey: 'statusName', fieldName: '상태명', inputType: 'text', isRequired: true, description: '출하상태 이름' },
    { id: 12, fieldKey: 'statusColor', fieldName: '표시색상', inputType: 'select', isRequired: true, options: { items: ['gray', 'blue', 'yellow', 'green', 'red'] }, description: '상태 표시 색상' },
    { id: 13, fieldKey: 'statusOrder', fieldName: '순서', inputType: 'number', isRequired: true, description: '상태 순서' },
    // 포장기준 필드
    { id: 14, fieldKey: 'packagingCode', fieldName: '포장코드', inputType: 'text', isRequired: true, description: '포장유형 코드' },
    { id: 15, fieldKey: 'packagingName', fieldName: '포장유형명', inputType: 'text', isRequired: true, description: '포장유형 이름' },
    { id: 16, fieldKey: 'packagingMaterials', fieldName: '사용자재', inputType: 'text', isRequired: false, description: '사용 자재 목록' },
    // 차량 필드
    { id: 17, fieldKey: 'plateNo', fieldName: '차량번호', inputType: 'text', isRequired: true, description: '차량 번호' },
    { id: 18, fieldKey: 'vehicleType', fieldName: '차종', inputType: 'select', isRequired: true, options: { items: ['1톤트럭', '2.5톤트럭', '5톤트럭', '카고', '윙바디', '탑차'] }, description: '차량 종류' },
    { id: 19, fieldKey: 'capacity', fieldName: '적재용량', inputType: 'text', isRequired: true, description: '적재 용량' },
    { id: 20, fieldKey: 'driver', fieldName: '담당기사', inputType: 'text', isRequired: false, description: '담당 기사' },
    // 출하문서 필드
    { id: 21, fieldKey: 'documentCode', fieldName: '문서코드', inputType: 'text', isRequired: true, description: '문서 코드' },
    { id: 22, fieldKey: 'documentName', fieldName: '문서명', inputType: 'text', isRequired: true, description: '문서 이름' },
    { id: 23, fieldKey: 'isDocRequired', fieldName: '필수여부', inputType: 'checkbox', isRequired: true, description: '필수 문서 여부' },
    { id: 24, fieldKey: 'template', fieldName: '양식파일', inputType: 'file', isRequired: false, description: '양식 파일' },
  ],
  // 섹션 정의
  masterSections: [
    { id: 1, sectionKey: 'deliveryMethod', sectionName: '배송방법 정보', sectionType: 'general', applicableTypes: ['DM'], description: '배송방법 정보', fields: [1, 2, 3, 4] },
    { id: 2, sectionKey: 'carrier', sectionName: '배송업체 정보', sectionType: 'general', applicableTypes: ['CR'], description: '배송업체 정보', fields: [5, 6, 7, 8, 9, 4] },
    { id: 3, sectionKey: 'shipmentStatus', sectionName: '출하상태 정보', sectionType: 'general', applicableTypes: ['SS'], description: '출하상태 정보', fields: [10, 11, 12, 13] },
    { id: 4, sectionKey: 'packaging', sectionName: '포장기준 정보', sectionType: 'general', applicableTypes: ['PK'], description: '포장기준 정보', fields: [14, 15, 16, 3] },
    { id: 5, sectionKey: 'vehicle', sectionName: '차량 정보', sectionType: 'general', applicableTypes: ['VH'], description: '차량 정보', fields: [17, 18, 19, 20, 8, 4] },
    { id: 6, sectionKey: 'document', sectionName: '출하문서 정보', sectionType: 'general', applicableTypes: ['SD'], description: '출하문서 정보', fields: [21, 22, 23, 24, 3] },
  ],
  // 페이지 템플릿
  pageTemplates: [
    {
      id: 1,
      pageCode: 'delivery_method_list',
      pageName: '배송방법 목록',
      pagePath: '/출고관리/배송방법_목록',
      pageType: 'list',
      itemTypes: ['DM'],
      sections: [
        { sectionId: 1, sectionKey: 'deliveryMethod', sectionName: '배송방법', sortOrder: 1, fields: [] },
      ],
      conditions: [],
    },
    {
      id: 2,
      pageCode: 'carrier_list',
      pageName: '배송업체 목록',
      pagePath: '/출고관리/배송업체_목록',
      pageType: 'list',
      itemTypes: ['CR'],
      sections: [
        { sectionId: 1, sectionKey: 'carrier', sectionName: '배송업체', sortOrder: 1, fields: [] },
      ],
      conditions: [],
    },
    {
      id: 3,
      pageCode: 'shipment_status_list',
      pageName: '출하상태 목록',
      pagePath: '/출고관리/출하상태_목록',
      pageType: 'list',
      itemTypes: ['SS'],
      sections: [
        { sectionId: 1, sectionKey: 'shipmentStatus', sectionName: '출하상태', sortOrder: 1, fields: [] },
      ],
      conditions: [],
    },
    {
      id: 4,
      pageCode: 'packaging_list',
      pageName: '포장기준 목록',
      pagePath: '/출고관리/포장기준_목록',
      pageType: 'list',
      itemTypes: ['PK'],
      sections: [
        { sectionId: 1, sectionKey: 'packaging', sectionName: '포장기준', sortOrder: 1, fields: [] },
      ],
      conditions: [],
    },
    {
      id: 5,
      pageCode: 'vehicle_list',
      pageName: '차량 목록',
      pagePath: '/출고관리/차량_목록',
      pageType: 'list',
      itemTypes: ['VH'],
      sections: [
        { sectionId: 1, sectionKey: 'vehicle', sectionName: '차량', sortOrder: 1, fields: [] },
      ],
      conditions: [],
    },
    {
      id: 6,
      pageCode: 'document_list',
      pageName: '출하문서 목록',
      pagePath: '/출고관리/출하문서_목록',
      pageType: 'list',
      itemTypes: ['SD'],
      sections: [
        { sectionId: 1, sectionKey: 'document', sectionName: '출하문서', sortOrder: 1, fields: [] },
      ],
      conditions: [],
    },
  ],
};

// ===== 상세 데이터 (기존 구조 유지) =====

// ===== 1. 배송방법 관리 =====
export const deliveryMethodMaster = {
  title: '배송방법 관리',
  description: '출하 시 사용하는 배송방법을 정의합니다.',

  // 배송방법 유형
  methods: [
    { id: 'DM01', code: 'SELF', name: '자가배송', description: '자사 차량으로 직접 배송', isActive: true },
    { id: 'DM02', code: 'FREIGHT', name: '화물', description: '일반 화물 운송', isActive: true },
    { id: 'DM03', code: 'EXPRESS', name: '택배', description: '택배사 배송', isActive: true },
    { id: 'DM04', code: 'INSTALL', name: '설치배송', description: '배송 후 설치까지 포함', isActive: true },
    { id: 'DM05', code: 'PICKUP', name: '직접수령', description: '고객이 직접 방문 수령', isActive: true },
  ],

  // 필드 정의
  fields: [
    { id: 'code', label: '코드', type: 'text', required: true, width: 100 },
    { id: 'name', label: '배송방법명', type: 'text', required: true, width: 150 },
    { id: 'description', label: '설명', type: 'text', required: false, width: 250 },
    { id: 'isActive', label: '사용여부', type: 'toggle', required: true, width: 80 },
  ],
};

// ===== 2. 배송업체 관리 =====
export const carrierMaster = {
  title: '배송업체 관리',
  description: '거래하는 배송/운송 업체를 관리합니다.',

  // 배송업체 목록 (샘플)
  carriers: [
    { id: 'CR01', code: 'HANJIN', name: '한진택배', type: 'EXPRESS', contact: '1588-0011', isActive: true },
    { id: 'CR02', code: 'CJ', name: 'CJ대한통운', type: 'EXPRESS', contact: '1588-1255', isActive: true },
    { id: 'CR03', code: 'LOTTE', name: '롯데택배', type: 'EXPRESS', contact: '1588-2121', isActive: true },
    { id: 'CR04', code: 'SAMIL', name: '삼일운수', type: 'FREIGHT', contact: '02-1234-5678', isActive: true },
    { id: 'CR05', code: 'DAEHAN', name: '대한화물', type: 'FREIGHT', contact: '02-9876-5432', isActive: true },
  ],

  // 업체 유형
  carrierTypes: [
    { value: 'EXPRESS', label: '택배' },
    { value: 'FREIGHT', label: '화물' },
    { value: 'SPECIAL', label: '특수화물' },
  ],

  // 필드 정의
  fields: [
    { id: 'code', label: '업체코드', type: 'text', required: true, width: 100 },
    { id: 'name', label: '업체명', type: 'text', required: true, width: 150 },
    { id: 'type', label: '업체유형', type: 'select', required: true, width: 100 },
    { id: 'contact', label: '연락처', type: 'text', required: false, width: 120 },
    { id: 'address', label: '주소', type: 'text', required: false, width: 250 },
    { id: 'isActive', label: '사용여부', type: 'toggle', required: true, width: 80 },
  ],
};

// ===== 3. 출하상태 관리 =====
export const shipmentStatusMaster = {
  title: '출하상태 관리',
  description: '출하 프로세스의 상태 코드를 정의합니다.',

  // 상태 정의
  statuses: [
    { id: 'SS01', code: 'WAITING', name: '출하대기', color: 'gray', order: 1, description: '출하 지시 대기 상태' },
    { id: 'SS02', code: 'INSTRUCTED', name: '출하지시', color: 'blue', order: 2, description: '출하 지시 완료' },
    { id: 'SS03', code: 'PICKING', name: '피킹중', color: 'yellow', order: 3, description: '출고 물품 피킹 진행' },
    { id: 'SS04', code: 'PACKING', name: '포장중', color: 'orange', order: 4, description: '포장 작업 진행' },
    { id: 'SS05', code: 'READY', name: '출하준비완료', color: 'cyan', order: 5, description: '출하 준비 완료' },
    { id: 'SS06', code: 'SHIPPED', name: '출하완료', color: 'green', order: 6, description: '출하 완료' },
    { id: 'SS07', code: 'DELIVERED', name: '배송완료', color: 'emerald', order: 7, description: '고객 인수 완료' },
    { id: 'SS08', code: 'CANCELLED', name: '출하취소', color: 'red', order: 99, description: '출하 취소' },
  ],

  // 상태 전이 규칙
  transitions: {
    WAITING: ['INSTRUCTED', 'CANCELLED'],
    INSTRUCTED: ['PICKING', 'CANCELLED'],
    PICKING: ['PACKING', 'INSTRUCTED'],
    PACKING: ['READY', 'PICKING'],
    READY: ['SHIPPED', 'PACKING'],
    SHIPPED: ['DELIVERED'],
    DELIVERED: [],
    CANCELLED: [],
  },

  // 필드 정의
  fields: [
    { id: 'code', label: '상태코드', type: 'text', required: true, width: 100 },
    { id: 'name', label: '상태명', type: 'text', required: true, width: 120 },
    { id: 'color', label: '표시색상', type: 'color', required: true, width: 100 },
    { id: 'order', label: '순서', type: 'number', required: true, width: 60 },
    { id: 'description', label: '설명', type: 'text', required: false, width: 200 },
  ],
};

// ===== 4. 포장기준 관리 =====
export const packagingMaster = {
  title: '포장기준 관리',
  description: '제품별 포장 방법과 자재를 정의합니다.',

  // 포장 유형
  packagingTypes: [
    { id: 'PT01', code: 'BOX', name: '박스포장', description: '골판지 박스 포장' },
    { id: 'PT02', code: 'PALLET', name: '파렛트포장', description: '파렛트 적재 포장' },
    { id: 'PT03', code: 'WRAP', name: '랩포장', description: '스트레치 랩 포장' },
    { id: 'PT04', code: 'CRATE', name: '목재포장', description: '목재 크레이트 포장' },
    { id: 'PT05', code: 'BUNDLE', name: '묶음포장', description: '밴딩 테이프 묶음' },
  ],

  // 포장 자재
  packagingMaterials: [
    { id: 'PM01', code: 'CARDBOARD', name: '골판지', unit: 'EA' },
    { id: 'PM02', code: 'BUBBLE', name: '에어캡', unit: 'M' },
    { id: 'PM03', code: 'FOAM', name: '폼보드', unit: 'EA' },
    { id: 'PM04', code: 'TAPE', name: '박스테이프', unit: 'EA' },
    { id: 'PM05', code: 'BAND', name: '밴딩끈', unit: 'M' },
    { id: 'PM06', code: 'STRETCH', name: '스트레치필름', unit: 'ROLL' },
  ],

  // 필드 정의
  fields: [
    { id: 'code', label: '코드', type: 'text', required: true, width: 100 },
    { id: 'name', label: '포장유형명', type: 'text', required: true, width: 150 },
    { id: 'description', label: '설명', type: 'text', required: false, width: 250 },
    { id: 'materials', label: '사용자재', type: 'multiselect', required: false, width: 200 },
  ],
};

// ===== 5. 차량/운송 관리 =====
export const vehicleMaster = {
  title: '차량/운송 관리',
  description: '자사 보유 차량 및 운전기사를 관리합니다.',

  // 차량 목록 (샘플)
  vehicles: [
    { id: 'VH01', plateNo: '12가1234', type: '1톤트럭', capacity: '1톤', driver: '김운전', isActive: true },
    { id: 'VH02', plateNo: '34나5678', type: '2.5톤트럭', capacity: '2.5톤', driver: '이배달', isActive: true },
    { id: 'VH03', plateNo: '56다9012', type: '5톤트럭', capacity: '5톤', driver: '박화물', isActive: true },
    { id: 'VH04', plateNo: '78라3456', type: '카고', capacity: '11톤', driver: '최대형', isActive: true },
  ],

  // 차량 유형
  vehicleTypes: [
    { value: '1톤트럭', label: '1톤 트럭' },
    { value: '2.5톤트럭', label: '2.5톤 트럭' },
    { value: '5톤트럭', label: '5톤 트럭' },
    { value: '카고', label: '카고 (11톤)' },
    { value: '윙바디', label: '윙바디' },
    { value: '탑차', label: '탑차' },
  ],

  // 필드 정의
  fields: [
    { id: 'plateNo', label: '차량번호', type: 'text', required: true, width: 100 },
    { id: 'type', label: '차종', type: 'select', required: true, width: 120 },
    { id: 'capacity', label: '적재용량', type: 'text', required: true, width: 80 },
    { id: 'driver', label: '담당기사', type: 'text', required: false, width: 100 },
    { id: 'contact', label: '연락처', type: 'text', required: false, width: 120 },
    { id: 'isActive', label: '사용여부', type: 'toggle', required: true, width: 80 },
  ],
};

// ===== 6. 출하문서 설정 =====
export const shipmentDocumentMaster = {
  title: '출하문서 설정',
  description: '출하 관련 문서 양식을 설정합니다.',

  // 문서 유형
  documentTypes: [
    { id: 'SD01', code: 'SLIP', name: '출고증', description: '출고 확인 문서', isRequired: true },
    { id: 'SD02', code: 'RECEIPT', name: '인수증', description: '고객 인수 확인', isRequired: true },
    { id: 'SD03', code: 'PACKING', name: '포장명세서', description: '포장 내역 상세', isRequired: false },
    { id: 'SD04', code: 'INVOICE', name: '거래명세서', description: '거래 내역 명세', isRequired: false },
    { id: 'SD05', code: 'WAYBILL', name: '운송장', description: '배송 운송장', isRequired: true },
  ],

  // 필드 정의
  fields: [
    { id: 'code', label: '문서코드', type: 'text', required: true, width: 100 },
    { id: 'name', label: '문서명', type: 'text', required: true, width: 150 },
    { id: 'description', label: '설명', type: 'text', required: false, width: 200 },
    { id: 'isRequired', label: '필수여부', type: 'toggle', required: true, width: 80 },
    { id: 'template', label: '양식파일', type: 'file', required: false, width: 150 },
  ],
};

// ===== 출고기준관리 섹션 통합 =====
export const outboundMasterSections = [
  {
    id: 'delivery-method',
    title: '배송방법 관리',
    icon: 'Truck',
    config: deliveryMethodMaster,
    dataKey: 'methods',
  },
  {
    id: 'carrier',
    title: '배송업체 관리',
    icon: 'Building',
    config: carrierMaster,
    dataKey: 'carriers',
  },
  {
    id: 'shipment-status',
    title: '출하상태 관리',
    icon: 'GitBranch',
    config: shipmentStatusMaster,
    dataKey: 'statuses',
  },
  {
    id: 'packaging',
    title: '포장기준 관리',
    icon: 'Package',
    config: packagingMaster,
    dataKey: 'packagingTypes',
  },
  {
    id: 'vehicle',
    title: '차량/운송 관리',
    icon: 'Car',
    config: vehicleMaster,
    dataKey: 'vehicles',
  },
  {
    id: 'document',
    title: '출하문서 설정',
    icon: 'FileText',
    config: shipmentDocumentMaster,
    dataKey: 'documentTypes',
  },
];

// 출고기준관리 페이지 설정
export const outboundMasterPageConfig = {
  title: '출고기준관리',
  description: '출고/출하 프로세스에 필요한 기준 데이터를 관리합니다.',
  sections: outboundMasterSections,
};

export { outboundMasterConfig };

export default outboundMasterConfig;
