import { Router, Request, Response } from "express";
import { requireAuth } from "../middleware/auth";
import { buildBridgeDeepLink } from "../services/supervisorAiService";
import {
  getLabOverview,
  probePortal,
  probeAllPortals,
  analyzeProbesWithAi,
  discoverPortalsWithAi,
  commercializeWithAi,
} from "../services/portalLabService";

const router = Router();
router.use(requireAuth);

router.get("/overview", async (_req: Request, res: Response) => {
  try {
    const overview = await getLabOverview();
    res.json({ success: true, ...overview });
  } catch (e) {
    res.status(500).json({ success: false, error: (e as Error).message });
  }
});

router.post("/probe/:slug", async (req: Request, res: Response) => {
  const slug = String(req.params.slug || "").trim();
  const operation = String(req.body?.operation || req.query?.op || "sale").toLowerCase() === "rent" ? "rent" : "sale";
  if (!slug) return res.status(400).json({ success: false, error: "slug requerido" });
  try {
    const result = await probePortal(slug, operation);
    res.json({ success: true, result });
  } catch (e) {
    res.status(404).json({ success: false, error: (e as Error).message });
  }
});

router.post("/probe-all", async (req: Request, res: Response) => {
  const operation = String(req.body?.operation || "sale").toLowerCase() === "rent" ? "rent" : "sale";
  try {
    const results = await probeAllPortals(operation);
    res.json({
      success: true,
      operation,
      summary: {
        total: results.length,
        ok: results.filter((r) => r.ok).length,
        failed: results.filter((r) => !r.ok).length,
      },
      results,
    });
  } catch (e) {
    res.status(500).json({ success: false, error: (e as Error).message });
  }
});

router.post("/analyze", async (req: Request, res: Response) => {
  const results = Array.isArray(req.body?.results) ? req.body.results : null;
  const focus = req.body?.focus ? String(req.body.focus) : undefined;
  if (!results?.length) {
    return res.status(400).json({ success: false, error: "results[] requerido — ejecuta probe-all primero" });
  }
  try {
    const analysis = await analyzeProbesWithAi(results, focus);
    res.json({ success: true, ...analysis });
  } catch (e) {
    res.status(502).json({ success: false, error: (e as Error).message });
  }
});

router.post("/discover", async (_req: Request, res: Response) => {
  try {
    const discovery = await discoverPortalsWithAi();
    res.json({ success: true, ...discovery });
  } catch (e) {
    res.status(502).json({ success: false, error: (e as Error).message });
  }
});

router.post("/commercialize", async (_req: Request, res: Response) => {
  try {
    const advice = await commercializeWithAi();
    res.json({ success: true, ...advice });
  } catch (e) {
    res.status(502).json({ success: false, error: (e as Error).message });
  }
});

router.post("/bridge-fix", (req: Request, res: Response) => {
  const portal = String(req.body?.portal || "").trim();
  const diagnosis = String(req.body?.diagnosis || "").trim();
  if (!portal) return res.status(400).json({ success: false, error: "portal requerido" });
  const prompt = [
    "MODO REVISIÓN — Portal Lab Captajaus",
    `Arreglar scraper del portal: ${portal}`,
    diagnosis ? `Diagnóstico probe: ${diagnosis}` : "",
    "",
    "Revisa selector, engine (cheerio/playwright), anti-bot y fallback JSON si aplica.",
    "Diff mínimo; verifica con probe antes de cerrar.",
  ]
    .filter(Boolean)
    .join("\n");
  res.json({ success: true, bridgeUrl: buildBridgeDeepLink(prompt) });
});

export default router;
