/**
 * 비정상 궤적 API 모듈
 */

import { API_ENDPOINTS } from '../utils/constants.js';

/**
 * 최근 비정상 궤적 조회
 * @param {number} hours - 조회할 시간 범위
 * @returns {Promise<Array>} 비정상 궤적 목록
 */
export async function fetchRecentTracks(hours) {
    try {
        const response = await fetch(`${API_ENDPOINTS.ABNORMAL_TRACKS.RECENT}?hours=${hours}`);
        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }
        return await response.json();
    } catch (error) {
        console.error('Error fetching recent tracks:', error);
        throw error;
    }
}

/**
 * 사용자 정의 비정상 궤적 검출
 * @param {Object} params - 검출 파라미터
 * @returns {Promise<Array>} 검출된 궤적 목록
 */
export async function detectCustomTracks(params) {
    try {
        const response = await fetch(API_ENDPOINTS.ABNORMAL_TRACKS.DETECT, {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify(params)
        });
        
        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }
        return await response.json();
    } catch (error) {
        console.error('Error detecting custom tracks:', error);
        throw error;
    }
}

/**
 * 선택된 궤적을 비정상 테이블로 이동
 * @param {Object} params - 이동 파라미터
 * @returns {Promise<Object>} 처리 결과
 */
export async function moveTracksToAbnormal(params) {
    try {
        const response = await fetch(API_ENDPOINTS.ABNORMAL_TRACKS.MOVE_TO_ABNORMAL, {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify(params)
        });
        
        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }
        return await response.json();
    } catch (error) {
        console.error('Error moving tracks to abnormal:', error);
        throw error;
    }
}

/**
 * 필터링된 비정상 궤적 조회
 * @param {Object} filters - 필터 조건
 * @returns {Promise<Array>} 필터링된 궤적 목록
 */
export async function fetchFilteredTracks(filters) {
    const { startDate, endDate, type, vesselId } = filters;
    
    // 날짜를 시간 차이로 변환
    const start = new Date(startDate);
    const end = new Date(endDate);
    end.setHours(23, 59, 59);
    
    const now = new Date();
    const hoursFromNow = Math.ceil((now - start) / (1000 * 60 * 60));
    
    // 전체 데이터 조회
    const allTracks = await fetchRecentTracks(hoursFromNow);
    
    // 클라이언트 측 필터링
    let filteredTracks = allTracks.filter(track => {
        const trackDate = new Date(track.detectedAt);
        return trackDate >= start && trackDate <= end;
    });
    
    if (type) {
        filteredTracks = filteredTracks.filter(t => t.abnormalType === type);
    }
    
    if (vesselId) {
        filteredTracks = filteredTracks.filter(t => t.vesselId.includes(vesselId));
    }
    
    return filteredTracks;
}