import { api } from '@common/services/api'; // ============================================================ // 항공 방제 API // ============================================================ // === AERIAL_MEDIA === export interface AerialMediaItem { aerialMediaSn: number; acdntSn: number | null; fileNm: string; orgnlNm: string | null; filePath: string | null; lon: number | null; lat: number | null; locDc: string | null; equipTpCd: string; // drone/plane/satellite equipNm: string; mediaTpCd: string; // 사진/영상/적외선/SAR/가시광/광학 takngDtm: string | null; fileSz: string | null; resolution: string | null; } // === CCTV_CAMERA === export interface CctvCameraItem { cctvSn: number; cameraNm: string; regionNm: string; lon: number | null; lat: number | null; locDc: string | null; coordDc: string | null; sttsCd: string; // LIVE/OFFLINE/MAINT ptzYn: string; sourceNm: string | null; streamUrl: string | null; } // === SAT_REQUEST === export interface SatRequestItem { satReqSn: number; reqCd: string; acdntSn: number | null; lon: number | null; lat: number | null; zoneDc: string | null; coordDc: string | null; zoneAreaKm2: number | null; satNm: string | null; providerNm: string | null; resolution: string | null; purposeDc: string | null; reqstrNm: string | null; reqDtm: string | null; expectedRcvDtm: string | null; sttsCd: string; // PENDING/SHOOTING/COMPLETED/CANCELLED } export interface CreateSatRequestInput { reqCd: string; acdntSn?: number; lon?: number; lat?: number; zoneDc?: string; zoneAreaKm2?: number; satNm?: string; providerNm?: string; resolution?: string; purposeDc?: string; reqstrNm?: string; expectedRcvDtm?: string; } export async function fetchAerialMedia(params?: { equipType?: string; mediaType?: string; acdntSn?: number; search?: string; }): Promise { const response = await api.get('/aerial/media', { params }); return response.data; } export async function fetchCctvCameras(params?: { region?: string; status?: string; }): Promise { const response = await api.get('/aerial/cctv', { params }); return response.data; } export async function fetchSatRequests(params?: { status?: string; }): Promise { const response = await api.get('/aerial/sat-requests', { params }); return response.data; } export async function createSatRequest( input: CreateSatRequestInput, ): Promise<{ satReqSn: number }> { const response = await api.post<{ satReqSn: number }>('/aerial/sat-requests', input); return response.data; } // === DRONE STREAM === export interface DroneStreamItem { id: string; name: string; shipName: string; droneModel: string; ip: string; rtspUrl: string; region: string; status: 'idle' | 'starting' | 'streaming' | 'error'; hlsUrl: string | null; error: string | null; } export async function fetchDroneStreams(): Promise { const response = await api.get('/aerial/drone/streams'); return response.data; } export async function startDroneStreamApi(id: string): Promise<{ success: boolean; hlsUrl?: string; error?: string }> { const response = await api.post<{ success: boolean; hlsUrl?: string; error?: string }>(`/aerial/drone/streams/${id}/start`); return response.data; } export async function stopDroneStreamApi(id: string): Promise<{ success: boolean }> { const response = await api.post<{ success: boolean }>(`/aerial/drone/streams/${id}/stop`); return response.data; } // ============================================================ // UP42 위성 패스 조회 // ============================================================ export interface SatellitePass { id: string; satellite: string; provider: string; type: 'optical' | 'sar' | 'elevation'; resolution: string; color: string; startTime: string; endTime: string; maxElevation: number; direction: 'ascending' | 'descending'; orbit: Array<{ lat: number; lon: number }>; } export async function fetchSatellitePasses(): Promise { const response = await api.get<{ passes: SatellitePass[] }>('/aerial/satellite/passes'); return response.data.passes; }