const express = require('express'); const cors = require('cors'); require('dotenv').config(); const app = express(); const PORT = process.env.PORT || 3001; app.use(cors()); app.use(express.json()); // Mock conurbation data for MVP const MOCK_CONURBATIONS = [ { id: 1, name: "London", population: 9000000, distance_km: 0, lat: 51.5074, lon: -0.1278 }, { id: 2, name: "Paris", population: 2161000, distance_km: 344, lat: 48.8566, lon: 2.3522 }, { id: 3, name: "Berlin", population: 3644000, distance_km: 878, lat: 52.5200, lon: 13.4050 }, { id: 4, name: "Warsaw", population: 1793000, distance_km: 1200, lat: 52.2297, lon: 21.0122 }, { id: 5, name: "Moscow", population: 12506000, distance_km: 2063, lat: 55.7558, lon: 37.6173 }, { id: 6, name: "Kazan", population: 1257000, distance_km: 2850, lat: 55.7897, lon: 49.1219 }, { id: 7, name: "Almaty", population: 2000000, distance_km: 3900, lat: 43.2220, lon: 76.8512 }, { id: 8, name: "Urumqi", population: 3500000, distance_km: 4500, lat: 43.8256, lon: 87.6168 }, { id: 9, name: "Lahore", population: 11126000, distance_km: 5400, lat: 31.5204, lon: 74.3587 }, { id: 10, name: "New Delhi", population: 29399000, distance_km: 5800, lat: 28.6139, lon: 77.2090 }, { id: 11, name: "Dhaka", population: 21006000, distance_km: 6200, lat: 23.8103, lon: 90.4125 }, { id: 12, name: "Chennai", population: 10971000, distance_km: 6500, lat: 13.0827, lon: 80.2707 }, { id: 13, name: "Bangkok", population: 10539000, distance_km: 7200, lat: 13.7563, lon: 100.5018 }, { id: 14, name: "Jakarta", population: 10562000, distance_km: 8100, lat: -6.2088, lon: 106.8456 }, { id: 15, name: "Singapore", population: 5686000, distance_km: 8300, lat: 1.3521, lon: 103.8198 }, { id: 16, name: "Manila", population: 17801000, distance_km: 8700, lat: 14.5995, lon: 120.9842 }, { id: 17, name: "Tokyo", population: 37400000, distance_km: 9500, lat: 35.6762, lon: 139.6503 }, { id: 18, name: "Seoul", population: 9720000, distance_km: 9200, lat: 37.5665, lon: 126.9780 }, { id: 19, name: "Beijing", population: 21540000, distance_km: 8900, lat: 39.9042, lon: 116.4074 }, { id: 20, name: "Shanghai", population: 27058000, distance_km: 9000, lat: 31.2304, lon: 121.4737 } ]; // Mock API endpoint - returns dummy conurbations based on input coordinates app.get('/api/line-of-sight', (req, res) => { const { lat, lon, direction, tolerance } = req.query; console.log(`Received request: lat=${lat}, lon=${lon}, direction=${direction}, tolerance=${tolerance}`); // Return mock data for MVP res.json({ success: true, data: { start_point: { lat: parseFloat(lat) || 51.5074, lon: parseFloat(lon) || -0.1278 }, direction: parseInt(direction) || 45, tolerance_km: parseInt(tolerance) || 50, conurbations: MOCK_CONURBATIONS.slice(0, 20), line_coordinates: [ { lat: 51.5074, lon: -0.1278 }, { lat: 48.8566, lon: 2.3522 }, { lat: 52.5200, lon: 13.4050 }, { lat: 55.7558, lon: 37.6173 }, { lat: 43.2220, lon: 76.8512 }, { lat: 28.6139, lon: 77.2090 }, { lat: 13.7563, lon: 100.5018 }, { lat: -6.2088, lon: 106.8456 }, { lat: 35.6762, lon: 139.6503 }, { lat: 51.5074, lon: -0.1278 } // Complete the circle ] }, message: "Mock data returned for MVP - Real geospatial calculations coming soon" }); }); // Health check endpoint app.get('/api/health', (req, res) => { res.json({ status: 'ok', timestamp: new Date().toISOString() }); }); app.listen(PORT, '0.0.0.0', () => { console.log(`Line of Sight Backend running on port ${PORT}`); });