/**
 * 범용 폼 모달 컴포넌트 기본 설정
 */

import { 
  UniversalFormModalConfig, 
  TableSectionConfig,
  TableColumnConfig,
  ValueMappingConfig,
  ColumnModeConfig,
  TablePreFilter,
  TableModalFilter,
  TableCalculationRule,
  ConditionalTableConfig,
  ConditionalTableOption,
} from "./types";

// 기본 설정값
export const defaultConfig: UniversalFormModalConfig = {
  modal: {
    title: "데이터 입력",
    description: "",
    size: "lg",
    closeOnOutsideClick: false,
    showCloseButton: true,
  },
  sections: [
    {
      id: "default",
      title: "기본 정보",
      description: "",
      collapsible: false,
      defaultCollapsed: false,
      columns: 2,
      gap: "16px",
      fields: [],
      repeatable: false,
    },
  ],
  saveConfig: {
    tableName: "",
    primaryKeyColumn: "id",
    afterSave: {
      closeModal: true,
      refreshParent: true,
      showToast: true,
    },
  },
  editMode: {
    enabled: false,
    loadDataOnOpen: true,
    identifierField: "id",
  },
};

// 기본 필드 설정
export const defaultFieldConfig = {
  id: "",
  columnName: "",
  label: "",
  fieldType: "text" as const,
  required: false,
  defaultValue: "",
  placeholder: "",
  disabled: false,
  readOnly: false,
  width: "100%",
  gridSpan: 6,
  receiveFromParent: false,
};

// 기본 섹션 설정
export const defaultSectionConfig = {
  id: "",
  title: "새 섹션",
  description: "",
  type: "fields" as const,
  collapsible: false,
  defaultCollapsed: false,
  columns: 2,
  gap: "16px",
  fields: [],
  repeatable: false,
  repeatConfig: {
    minItems: 0,
    maxItems: 10,
    addButtonText: "+ 추가",
    removeButtonText: "삭제",
    itemTitle: "항목 {index}",
    confirmRemove: false,
  },
  optionalFieldGroups: [],
  linkedFieldGroups: [],
};

// ============================================
// 테이블 섹션 관련 기본값
// ============================================

// 기본 테이블 섹션 설정
export const defaultTableSectionConfig: TableSectionConfig = {
  source: {
    tableName: "",
    displayColumns: [],
    searchColumns: [],
    columnLabels: {},
  },
  filters: {
    preFilters: [],
    modalFilters: [],
  },
  columns: [],
  calculations: [],
  saveConfig: {
    targetTable: undefined,
    uniqueField: undefined,
  },
  uiConfig: {
    addButtonText: "항목 검색",
    modalTitle: "항목 검색 및 선택",
    multiSelect: true,
    maxHeight: "400px",
  },
  conditionalTable: undefined,
};

// 기본 조건부 테이블 설정
export const defaultConditionalTableConfig: ConditionalTableConfig = {
  enabled: false,
  triggerType: "checkbox",
  conditionColumn: "",
  options: [],
  optionSource: {
    enabled: false,
    tableName: "",
    valueColumn: "",
    labelColumn: "",
    filterCondition: "",
  },
  sourceFilter: {
    enabled: false,
    filterColumn: "",
  },
};

// 기본 조건부 테이블 옵션 설정
export const defaultConditionalTableOptionConfig: ConditionalTableOption = {
  id: "",
  value: "",
  label: "",
};

// 기본 테이블 컬럼 설정
export const defaultTableColumnConfig: TableColumnConfig = {
  field: "",
  label: "",
  type: "text",
  editable: true,
  calculated: false,
  required: false,
  width: "150px",
  minWidth: "60px",
  maxWidth: "400px",
  defaultValue: undefined,
  selectOptions: [],
  valueMapping: undefined,
  columnModes: [],
};

// 기본 값 매핑 설정
export const defaultValueMappingConfig: ValueMappingConfig = {
  type: "source",
  sourceField: "",
  externalRef: undefined,
  internalField: undefined,
};

// 기본 컬럼 모드 설정
export const defaultColumnModeConfig: ColumnModeConfig = {
  id: "",
  label: "",
  isDefault: false,
  valueMapping: {
    type: "source",
    sourceField: "",
  },
};

// 기본 사전 필터 설정
export const defaultPreFilterConfig: TablePreFilter = {
  column: "",
  operator: "=",
  value: "",
};

// 기본 모달 필터 설정
export const defaultModalFilterConfig: TableModalFilter = {
  column: "",
  label: "",
  type: "category",
  categoryRef: undefined,
  options: [],
  optionsFromTable: undefined,
  defaultValue: undefined,
};

// 기본 계산 규칙 설정
export const defaultCalculationRuleConfig: TableCalculationRule = {
  resultField: "",
  formula: "",
  dependencies: [],
};

// 기본 옵셔널 필드 그룹 설정
export const defaultOptionalFieldGroupConfig = {
  id: "",
  fields: [],
  // 섹션 스타일 설정
  title: "옵셔널 그룹",
  description: "",
  columns: undefined, // undefined면 부모 섹션 columns 상속
  collapsible: false,
  defaultCollapsed: false,
  // 버튼 설정
  addButtonText: "",
  removeButtonText: "제거",
  confirmRemove: false,
  // 연동 필드 설정
  triggerField: "",
  triggerValueOnAdd: "",
  triggerValueOnRemove: "",
};

// 기본 연동 필드 그룹 설정
export const defaultLinkedFieldGroupConfig = {
  id: "",
  label: "연동 필드",
  sourceTable: "dept_info",
  displayFormat: "code_name" as const,
  displayColumn: "dept_name",
  valueColumn: "dept_code",
  mappings: [],
  required: false,
  placeholder: "선택하세요",
  gridSpan: 6,
};

// 기본 연동 필드 매핑 설정
export const defaultLinkedFieldMappingConfig = {
  sourceColumn: "",
  targetColumn: "",
};

// 기본 채번규칙 설정
export const defaultNumberingRuleConfig = {
  enabled: false,
  ruleId: "",
  editable: false,
  hidden: false,
  generateOnOpen: true,
  generateOnSave: false,
};

// 기본 Select 옵션 설정
export const defaultSelectOptionsConfig = {
  type: "static" as const,
  staticOptions: [],
  tableName: "",
  valueColumn: "",
  labelColumn: "",
  filterCondition: "",
  codeCategory: "",
};

// 모달 크기별 너비
export const MODAL_SIZE_MAP = {
  sm: 400,
  md: 600,
  lg: 800,
  xl: 1000,
  full: "100%",
} as const;

// 유틸리티: 고유 ID 생성
export const generateUniqueId = (prefix: string = "item"): string => {
  return `${prefix}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
};

// 유틸리티: 섹션 ID 생성
export const generateSectionId = (): string => {
  return generateUniqueId("section");
};

// 유틸리티: 필드 ID 생성
export const generateFieldId = (): string => {
  return generateUniqueId("field");
};

// 유틸리티: 연동 필드 그룹 ID 생성
export const generateLinkedFieldGroupId = (): string => {
  return generateUniqueId("linked");
};

// 유틸리티: 테이블 컬럼 ID 생성
export const generateTableColumnId = (): string => {
  return generateUniqueId("tcol");
};

// 유틸리티: 컬럼 모드 ID 생성
export const generateColumnModeId = (): string => {
  return generateUniqueId("mode");
};

// 유틸리티: 필터 ID 생성
export const generateFilterId = (): string => {
  return generateUniqueId("filter");
};

// 유틸리티: 조건부 테이블 옵션 ID 생성
export const generateConditionalOptionId = (): string => {
  return generateUniqueId("cond");
};
