"use client";

import { ComponentRegistry } from "../ComponentRegistry";
import { initializeHotReload } from "../utils/hotReload";

/**
 * 컴포넌트 시스템 초기화
 * 모든 컴포넌트를 자동으로 로드하고 등록합니다
 */

// 컴포넌트 자동 디스커버리 및 로드
// 현재는 수동 import 방식 사용 (향후 자동 디스커버리로 확장 예정)

/**
 * 새 구조 컴포넌트들 (자동 등록)
 * CLI로 생성된 컴포넌트들은 여기에 import만 추가하면 자동으로 등록됩니다
 */

// 기본 입력 컴포넌트들 (v2 버전 없음 - 유지)
import "./text-input/TextInputRenderer";
import "./textarea-basic/TextareaBasicRenderer";
import "./number-input/NumberInputRenderer";
import "./select-basic/SelectBasicRenderer";
import "./checkbox-basic/CheckboxBasicRenderer";
import "./radio-basic/RadioBasicRenderer";
import "./date-input/DateInputRenderer";
import "./file-upload/FileUploadRenderer";
import "./image-widget/ImageWidgetRenderer";
import "./slider-basic/SliderBasicRenderer";
import "./toggle-switch/ToggleSwitchRenderer";
import "./image-display/ImageDisplayRenderer";
import "./accordion-basic/AccordionBasicRenderer"; // 컴포넌트 패널에서만 숨김
import "./split-panel-layout2/SplitPanelLayout2Renderer"; // 분할 패널 레이아웃 v2
import "./map/MapRenderer";
import "./repeater-field-group/RepeaterFieldGroupRenderer";
import "./flow-widget/FlowWidgetRenderer";
import "./category-manager/CategoryManagerRenderer";
import "./customer-item-mapping/CustomerItemMappingRenderer"; // 거래처별 품목정보

// 수주 등록 관련 컴포넌트들 (v2 버전 없음 - 유지)
import "./autocomplete-search-input/AutocompleteSearchInputRenderer";
import "./entity-search-input/EntitySearchInputRenderer";
import "./modal-repeater-table/ModalRepeaterTableRenderer";
import "./simple-repeater-table/SimpleRepeaterTableRenderer"; // 단순 반복 테이블

// 조건부 컨테이너 컴포넌트
import "./conditional-container/ConditionalContainerRenderer"; // 컴포넌트 패널에서만 숨김
import "./selected-items-detail-input/SelectedItemsDetailInputRenderer";

// 화면 임베딩 및 분할 패널 컴포넌트
import "./screen-split-panel/ScreenSplitPanelRenderer"; // 화면 분할 패널 (좌우 화면 임베딩 + 데이터 전달)

// 범용 폼 모달 컴포넌트
import "./universal-form-modal/UniversalFormModalRenderer"; // 컴포넌트 패널에서만 숨김

// 세금계산서 관리 컴포넌트
import "./tax-invoice-list/TaxInvoiceListRenderer"; // 세금계산서 목록, 작성, 발행, 취소

// 메일 수신자 선택 컴포넌트
import "./mail-recipient-selector/MailRecipientSelectorRenderer"; // 내부 인원 선택 + 외부 이메일 입력

// 연관 데이터 버튼 컴포넌트
import "./related-data-buttons/RelatedDataButtonsRenderer"; // 좌측 선택 데이터 기반 연관 테이블 버튼 표시

// ============================================================
// 기존 컴포넌트들 (기존 화면 호환성 유지)
// V2 버전도 별도로 존재하지만, 기존 화면은 이 컴포넌트들을 사용
// ============================================================
import "./button-primary/ButtonPrimaryRenderer";
import "./text-display/TextDisplayRenderer";
import "./divider-line/DividerLineRenderer";
import "./table-list/TableListRenderer";
import "./card-display/CardDisplayRenderer";
import "./split-panel-layout/SplitPanelLayoutRenderer";
import "./numbering-rule/NumberingRuleRenderer";
import "./table-search-widget";
import "./repeat-screen-modal/RepeatScreenModalRenderer";
import "./section-paper/SectionPaperRenderer";
import "./section-card/SectionCardRenderer";
import "./tabs/tabs-component";
import "./location-swap-selector/LocationSwapSelectorRenderer";
import "./rack-structure/RackStructureRenderer";
import "./pivot-grid/PivotGridRenderer";
import "./aggregation-widget/AggregationWidgetRenderer";
import "./repeat-container/RepeatContainerRenderer";

// ============================================================
// V2 컴포넌트들 (화면관리 전용 - 충돌 방지용 별도 버전)
// ============================================================
import "./v2-repeater/V2RepeaterRenderer";
import "./v2-button-primary/ButtonPrimaryRenderer";
import "./v2-split-panel-layout/SplitPanelLayoutRenderer";
import "./v2-aggregation-widget/AggregationWidgetRenderer";
import "./v2-card-display/CardDisplayRenderer";
import "./v2-numbering-rule/NumberingRuleRenderer";
import "./v2-table-list/TableListRenderer";
import "./v2-text-display/TextDisplayRenderer";
import "./v2-pivot-grid/PivotGridRenderer";
import "./v2-divider-line/DividerLineRenderer";
import "./v2-repeat-container/RepeatContainerRenderer";
import "./v2-section-card/SectionCardRenderer";
import "./v2-section-paper/SectionPaperRenderer";
import "./v2-rack-structure/RackStructureRenderer";
import "./v2-location-swap-selector/LocationSwapSelectorRenderer";
import "./v2-table-search-widget";
import "./v2-tabs-widget/tabs-component";
import "./v2-category-manager/V2CategoryManagerRenderer";
import "./v2-media/V2MediaRenderer"; // V2 통합 미디어 컴포넌트
import "./v2-table-grouped/TableGroupedRenderer"; // 그룹화 테이블
import "./v2-timeline-scheduler/TimelineSchedulerRenderer"; // 타임라인 스케줄러
import "./v2-input/V2InputRenderer"; // V2 통합 입력 컴포넌트
import "./v2-select/V2SelectRenderer"; // V2 통합 선택 컴포넌트
import "./v2-date/V2DateRenderer"; // V2 통합 날짜 컴포넌트
import "./v2-file-upload/V2FileUploadRenderer"; // V2 파일 업로드 컴포넌트
import "./v2-split-line/SplitLineRenderer"; // V2 캔버스 분할선
import "./v2-bom-tree/BomTreeRenderer"; // BOM 트리 뷰
import "./v2-bom-item-editor/BomItemEditorRenderer"; // BOM 하위품목 편집기
import "./v2-approval-step/ApprovalStepRenderer"; // 결재 단계 시각화
import "./v2-status-count/StatusCountRenderer"; // 상태별 카운트 카드
import "./v2-process-work-standard/ProcessWorkStandardRenderer"; // 공정 작업기준
import "./v2-item-routing/ItemRoutingRenderer"; // 품목별 라우팅
import "./v2-shipping-plan-editor/ShippingPlanEditorRenderer"; // 출하계획 동시등록
import "./v2-web-view/V2WebViewRenderer"; // 외부 웹페이지 임베딩 (SSO 지원)

/**
 * 컴포넌트 초기화 함수
 */
export async function initializeComponents() {
  try {
    // 1. 자동 등록된 컴포넌트 확인
    const registeredComponents = ComponentRegistry.getAllComponents();

    // 2. 카테고리별 통계
    const stats = ComponentRegistry.getStats();

    // 3. 개발 모드에서 디버그 정보 출력
    if (process.env.NODE_ENV === "development") {
      ComponentRegistry.debug();

      // 4. Hot Reload 시스템 초기화
      initializeHotReload();
    }

    return {
      success: true,
      totalComponents: registeredComponents.length,
      stats,
    };
  } catch (error) {
    console.error("❌ 컴포넌트 시스템 초기화 실패:", error);
    throw error;
  }
}

/**
 * 컴포넌트 시스템 상태 확인
 */
export function getComponentSystemStatus() {
  return {
    isInitialized: ComponentRegistry.getComponentCount() > 0,
    componentCount: ComponentRegistry.getComponentCount(),
    categories: ComponentRegistry.getStats().byCategory,
    lastInitialized: new Date(),
  };
}

// 즉시 초기화 실행 (브라우저 환경에서만)
if (typeof window !== "undefined") {
  // DOM이 로드된 후 초기화
  if (document.readyState === "loading") {
    document.addEventListener("DOMContentLoaded", () => {
      initializeComponents();
    });
  } else {
    // 이미 로드된 경우 즉시 실행
    setTimeout(initializeComponents, 0);
  }
}

// 개발 모드에서 Hot Reload 지원
if (process.env.NODE_ENV === "development" && typeof window !== "undefined") {
  // 전역 함수로 등록하여 개발자가 브라우저에서 직접 호출 가능
  (window as any).__INIT_COMPONENTS__ = initializeComponents;
  (window as any).__COMPONENT_STATUS__ = getComponentSystemStatus;
}
