// /js/work-report-create.js
import { renderCalendar } from './calendar.js';
import { getInitialData, createWorkReport } from './work-report-api.js';
import { initializeReportTable, getReportData } from './work-report-ui.js';

// 전역 상태 변수
let selectedDate = '';

/**
 * 날짜가 선택되었을 때 실행되는 콜백 함수.
 * 초기 데이터를 로드하고 테이블을 렌더링합니다.
 * @param {string} date - 선택된 날짜 (YYYY-MM-DD 형식)
 */
async function onDateSelect(date) {
  selectedDate = date;
  const tableBody = document.getElementById('reportBody');
  tableBody.innerHTML = '<tr><td colspan="8" class="text-center">데이터를 불러오는 중...</td></tr>';

  try {
    const initialData = await getInitialData();
    initializeReportTable(initialData);
  } catch (error) {
    alert('데이터를 불러오는 데 실패했습니다: ' + error.message);
    tableBody.innerHTML = '<tr><td colspan="8" class="text-center error">오류 발생! 데이터를 불러올 수 없습니다.</td></tr>';
  }
}

/**
 * '전체 등록' 버튼 클릭 시 실행되는 이벤트 핸들러.
 * 폼 데이터를 서버에 전송합니다.
 */
async function handleSubmit() {
  if (!selectedDate) {
    alert('먼저 달력에서 날짜를 선택해주세요.');
    return;
  }

  const reportData = getReportData();
  if (!reportData) {
    // getReportData 내부에서 이미 alert으로 사용자에게 알림
    return;
  }

  // 각 항목에 선택된 날짜 추가
  const payload = reportData.map(item => ({ ...item, date: selectedDate }));

  const submitBtn = document.getElementById('submitBtn');
  submitBtn.disabled = true;
  submitBtn.textContent = '등록 중...';

  try {
    const result = await createWorkReport(payload);
    if (result.success) {
      alert('✅ 작업 보고서가 성공적으로 등록되었습니다!');
      // 성공 후 폼을 다시 로드하거나, 다른 페이지로 이동 등의 로직 추가 가능
      onDateSelect(selectedDate); // 현재 날짜의 폼을 다시 로드
    } else {
      throw new Error(result.error || '알 수 없는 오류로 등록에 실패했습니다.');
    }
  } catch (error) {
    alert('❌ 등록 실패: ' + error.message);
  } finally {
    submitBtn.disabled = false;
    submitBtn.textContent = '전체 등록';
  }
}

/**
 * 페이지 초기화 함수
 */
function initializePage() {
  renderCalendar('calendar', onDateSelect);
  
  const submitBtn = document.getElementById('submitBtn');
  submitBtn.addEventListener('click', handleSubmit);
}

// DOM이 로드되면 페이지 초기화를 시작합니다.
document.addEventListener('DOMContentLoaded', initializePage);