// /js/daily-issue.js

import { getInitialData, getWorkersByDate, createIssueReport } from './daily-issue-api.js';
import { 
  populateProjects, 
  populateIssueTypes, 
  populateTimeOptions, 
  renderWorkerList,
  getFormData,
  setSubmitButtonState
} from './daily-issue-ui.js';

const dateSelect = document.getElementById('dateSelect');
const form = document.getElementById('issueForm');

/**
 * 날짜가 변경될 때마다 해당 날짜의 작업자 목록을 다시 불러옵니다.
 */
async function handleDateChange() {
  const selectedDate = dateSelect.value;
  if (!selectedDate) {
    document.getElementById('workerList').textContent = '날짜를 먼저 선택하세요.';
    return;
  }
  
  document.getElementById('workerList').textContent = '작업자 목록을 불러오는 중...';
  try {
    const workers = await getWorkersByDate(selectedDate);
    renderWorkerList(workers);
  } catch (error) {
    document.getElementById('workerList').textContent = '작업자 목록 로딩에 실패했습니다.';
  }
}

/**
 * 폼 제출 이벤트를 처리합니다.
 */
async function handleSubmit(event) {
  event.preventDefault();
  const issueData = getFormData();
  
  if (!issueData) return; // 유효성 검사 실패

  setSubmitButtonState(true);
  try {
    const result = await createIssueReport(issueData);
    if (result.success) {
      alert('✅ 이슈가 성공적으로 등록되었습니다.');
      form.reset(); // 폼 초기화
      dateSelect.value = new Date().toISOString().split('T')[0]; // 날짜 오늘로 리셋
      handleDateChange(); // 작업자 목록 새로고침
    } else {
      throw new Error(result.error || '알 수 없는 오류가 발생했습니다.');
    }
  } catch (error) {
    alert(`🚨 등록 실패: ${error.message}`);
  } finally {
    setSubmitButtonState(false);
  }
}

/**
 * 페이지 초기화 함수
 */
async function initializePage() {
  // 오늘 날짜 기본 설정
  dateSelect.value = new Date().toISOString().split('T')[0];
  
  populateTimeOptions();
  
  // 프로젝트, 이슈유형, 작업자 목록을 병렬로 로드
  try {
    const [initialData] = await Promise.all([
        getInitialData(),
        handleDateChange() // 초기 작업자 목록 로드
    ]);
    populateProjects(initialData.projects);
    populateIssueTypes(initialData.issueTypes);
  } catch (error) {
      alert('페이지 초기화 중 오류가 발생했습니다. 새로고침 해주세요.');
  }

  // 이벤트 리스너 설정
  dateSelect.addEventListener('change', handleDateChange);
  form.addEventListener('submit', handleSubmit);
}

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