import { Router, Request, Response } from 'express';
import { db } from '../../database/db';
import { OltService } from './olt.service';

const router = Router();

// GET /api/olt - List all OLT nodes
router.get('/', (req: Request, res: Response) => {
  res.json({ success: true, data: db.olts });
});

// GET /api/olt/infrastructure - Complete OLT + PON Port + ONU tree
router.get('/infrastructure', (req: Request, res: Response) => {
  const tree = OltService.getOltInfrastructureTree();
  res.json({ success: true, data: tree });
});

// GET /api/olt/unregistered-onus - Get auto-discovered unconfigured ONUs
router.get('/unregistered-onus', (req: Request, res: Response) => {
  const alerts = OltService.getUnregisteredOnus();
  res.json({ success: true, count: alerts.length, data: alerts });
});

// POST /api/olt/bind-onu - One-click bind ONU to subscriber
router.post('/bind-onu', async (req: Request, res: Response) => {
  try {
    const { onu_id, subscriber_id } = req.body;
    if (!onu_id || !subscriber_id) {
      return res.status(400).json({ success: false, message: 'onu_id and subscriber_id required.' });
    }

    await OltService.bindOnuToSubscriber(onu_id, subscriber_id);
    res.json({ success: true, message: 'ONU bound to subscriber profile successfully.' });
  } catch (err: any) {
    res.status(500).json({ success: false, message: err.message });
  }
});

// POST /api/olt/scrape-now - Trigger immediate 15-minute Laser Scraper run
router.post('/scrape-now', async (req: Request, res: Response) => {
  try {
    const results = await OltService.runLaserDiagnosticsScrape();
    res.json({
      success: true,
      message: `Laser diagnostics scrape executed on ${results.length} ONUs.`,
      data: results
    });
  } catch (err: any) {
    res.status(500).json({ success: false, message: err.message });
  }
});

export const oltRouter = router;
