import { createClient } from '@supabase/supabase-js' import { NextResponse } from 'next/server' const facilityTypes = { 0: "OBS", 1: "FSS", 2: "DEL", 3: "GND", 4: "TWR", 5: "APP", 6: "CTR", } as const; // Define FIR coverage const CZQM_AIRPORTS = ["CYHZ", "CYFC", "CYQM", "CYSJ", "CYZX", "CYYG", "CYYT", "CYQX", "CYYR", "LFVP", "CYQI", "CYAY", "CYDF", "CYJT"]; export async function GET() { try { // Fetch current VATSIM data const response = await fetch('https://data.vatsim.net/v3/vatsim-data.json'); if (!response.ok) throw new Error('Failed to fetch VATSIM data'); const data = await response.json(); const supabase = createClient(process.env.NEXT_PUBLIC_SUPABASE_URL, process.env.NEXT_SECRET_SUPABASE_KEY) // Filter controllers in CZQM airspace const czqmControllers = data.controllers.filter((controller: any) => { const callsign = controller.callsign; // console.log(callsign) return callsign.startsWith('CZQM_') || callsign.startsWith('CZQX_') || CZQM_AIRPORTS.some(airport => callsign.startsWith(airport)); }); // Process each controller for (const controller of czqmControllers) { const facilityType = facilityTypes[controller.facility as keyof typeof facilityTypes]; const airport = CZQM_AIRPORTS.find(ap => controller.callsign.startsWith(ap)) || 'CZQM'; // Insert or update controller session const { error } = await supabase .from('controller_sessions') .upsert({ cid: controller.cid, name: controller.name, callsign: controller.callsign, facility_type: facilityType, frequency: controller.frequency, airport: airport, last_seen: new Date().toISOString(), logon_time: controller.logon_time, }); if (error) { console.error('Error updating controller session:', error); } } // Clean up old sessions (controllers who have logged off) const fiveMinutesAgo = new Date(Date.now() - 5 * 60 * 1000).toISOString(); const { error: cleanupError } = await supabase .from('controller_sessions') .delete() .lt('last_seen', fiveMinutesAgo); if (cleanupError) { console.error('Error cleaning up old sessions:', cleanupError); } return NextResponse.json({ success: true }); } catch (error) { console.error('Error in controller update:', error); return NextResponse.json({ error: 'Failed to update controller data' }, { status: 500 }); } }