import { state, loadMasterDataFromDB } from './core/state';
import { renderNavigation } from './components/Navigation';
import { renderDashboard } from './views/DashboardView';
import { renderTable } from './views/AssetTableView';
import { downloadTemplate, exportToExcel, parseExcel, HardwareAsset } from './core/excelHandler';
import { initBaseModal } from './components/Modal/BaseModal';
import { initPcModal } from './components/Modal/PCModal';
import { initHwModal, openHwModal } from './components/Modal/HWModal';
import { initStorageModal } from './components/Modal/StorageModal';
import { initSwModal } from './components/Modal/SWModal';
import { initSwUserModal } from './components/Modal/SWUserModal';
import { initDashboardDetailModal } from './components/Modal/DashboardDetailModal';
import { createIcons, Download, Upload, FileSpreadsheet, Plus, X, LayoutDashboard, Monitor, Server, Database, Laptop, CalendarClock, Key, Cpu, Layers, Users, Paperclip, Edit2, History, RefreshCcw } from 'lucide';

// --- DB 저장을 위한 헬퍼 함수 ---
async function saveAllHwToDB(assets: HardwareAsset[]) {
  try {
    const response = await fetch('http://localhost:3000/api/hw/batch', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify(assets)
    });
    if (!response.ok) throw new Error('DB 저장 실패');
    console.log('✅ DB 저장 완료');
  } catch (err) {
    console.error('❌ DB 저장 실패:', err);
  }
}

// --- App Initialization ---
function initApp() {
  console.log('🚀 ITAM System Initializing...');
  const mainContent = document.getElementById('main-content')!;
  if (!mainContent) return;

  // 1. 전역 모달 및 내비게이션 초기화
  const { closeAllModals } = initBaseModal(); 
  
  try {
    renderNavigation((tab) => {
      if (tab === '대시보드') {
        renderDashboard(mainContent);
      } else {
        renderTable(mainContent);
      }
    });

    initPcModal(() => {
      saveAllHwToDB(state.masterData.hw);
      renderTable(mainContent);
    }, closeAllModals);

    initHwModal(); 
    
    initStorageModal(() => {
      saveAllHwToDB(state.masterData.hw);
      renderTable(mainContent);
    }, closeAllModals);

    initSwModal(() => renderTable(mainContent), closeAllModals);
    initSwUserModal(() => renderTable(mainContent), closeAllModals);
    initDashboardDetailModal();
  } catch (e) {
    console.error('❌ Initialization failed:', e);
  }

  // 2. 초기 렌더링
  renderDashboard(mainContent);

  // 3. 비동기 데이터 로드
  loadMasterDataFromDB().then((success) => {
    if (success) {
      if (state.activeSubTab === '대시보드') renderDashboard(mainContent);
      else renderTable(mainContent);
    }
  });

  // 4. 이벤트 바인딩
  document.getElementById('btn-download-template')?.addEventListener('click', () => downloadTemplate());
  document.getElementById('btn-export-excel')?.addEventListener('click', () => exportToExcel(state.masterData));
  
  const uploadInput = document.getElementById('excel-upload') as HTMLInputElement;
  uploadInput?.addEventListener('change', async (e) => {
    const file = (e.target as HTMLInputElement).files?.[0];
    if (file) {
      const data = await parseExcel(file);
      state.masterData = data;
      await saveAllHwToDB(data.hw);
      renderTable(mainContent);
    }
  });

  document.getElementById('btn-add-asset')?.addEventListener('click', () => {
    if (state.activeSubTab === '서버' || state.activeSubTab === '전산비품' || state.activeSubTab === '스토리지') {
      openHwModal({
        id: Math.random().toString(36).substring(2, 9),
        type: state.activeSubTab,
        법인: '한맥', 자산코드: '', 명칭: '', 위치: '', 관리자: '', IP주소: '', MACaddress: '', HW사양: '', OS: '', 납품업체: '', 품의서명: ''
      } as any);
    }
  });

  createIcons({
    icons: { Download, Upload, FileSpreadsheet, Plus, X, LayoutDashboard, Monitor, Server, Database, Laptop, CalendarClock, Key, Cpu, Layers, Users, Paperclip, Edit2, History, RefreshCcw }
  });
}

document.addEventListener('DOMContentLoaded', initApp);
