// /js/report-viewer-api.js
import { apiGet } from './api-helper.js';
import { getUser } from './auth.js';

/**
 * 보고서 조회를 위한 마스터 데이터를 로드합니다. (작업 유형, 상태 등)
 * 실패 시 기본값을 반환할 수 있도록 개별적으로 처리합니다.
 * @returns {Promise<object>} - 각 마스터 데이터 배열을 포함하는 객체
 */
export async function loadMasterData() {
  const masterData = {
    workTypes: [],
    workStatusTypes: [],
    errorTypes: []
  };
  try {
    // Promise.allSettled를 사용해 일부 API가 실패해도 전체가 중단되지 않도록 함
    const results = await Promise.allSettled([
      apiGet('/daily-work-reports/work-types'),
      apiGet('/daily-work-reports/work-status-types'),
      apiGet('/daily-work-reports/error-types')
    ]);

    if (results[0].status === 'fulfilled') masterData.workTypes = results[0].value;
    if (results[1].status === 'fulfilled') masterData.workStatusTypes = results[1].value;
    if (results[2].status === 'fulfilled') masterData.errorTypes = results[2].value;

    return masterData;
  } catch (error) {
    console.error('마스터 데이터 로딩 중 심각한 오류 발생:', error);
    // 최소한의 기본값이라도 반환
    return masterData; 
  }
}


/**
 * 사용자의 권한을 확인하여 적절한 API 엔드포인트와 파라미터를 결정합니다.
 * @param {string} selectedDate - 조회할 날짜
 * @returns {string} - 호출할 API URL
 */
function getReportApiUrl(selectedDate) {
  const user = getUser();
  
  // 관리자(admin, system)는 모든 데이터를 조회
  if (user && (user.role === 'admin' || user.role === 'system')) {
    // 백엔드에서 GET /daily-work-reports?date=YYYY-MM-DD 요청 시 
    // 권한을 확인하고 모든 데이터를 내려준다고 가정
    return `/daily-work-reports?date=${selectedDate}`;
  }
  
  // 그 외 사용자(leader, user)는 본인이 생성한 데이터만 조회
  // 백엔드에서 동일한 엔드포인트로 요청 시, 권한을 확인하고
  // 본인 데이터만 필터링해서 내려준다고 가정
  // (만약 엔드포인트가 다르다면 이 부분을 수정해야 함)
  return `/daily-work-reports?date=${selectedDate}`;
}


/**
 * 특정 날짜의 작업 보고서 데이터를 서버에서 가져옵니다.
 * @param {string} selectedDate - 조회할 날짜 (YYYY-MM-DD)
 * @returns {Promise<Array>} - 작업 보고서 데이터 배열
 */
export async function fetchReportData(selectedDate) {
  if (!selectedDate) {
    throw new Error('조회할 날짜가 선택되지 않았습니다.');
  }

  const apiUrl = getReportApiUrl(selectedDate);

  try {
    const rawData = await apiGet(apiUrl);
    
    // 서버 응답이 { success: true, data: [...] } 형태일 경우와 [...] 형태일 경우 모두 처리
    if (rawData && rawData.success && Array.isArray(rawData.data)) {
        return rawData.data;
    }
    if (Array.isArray(rawData)) {
        return rawData;
    }
    
    // 예상치 못한 형식의 응답
    console.warn('예상치 못한 형식의 API 응답:', rawData);
    return [];

  } catch (error) {
    console.error(`${selectedDate}의 작업 보고서 조회 실패:`, error);
    throw new Error('서버에서 데이터를 가져오는 데 실패했습니다.');
  }
} 