const express = require("express");
const { getAuthUrl, getTokenFromCode } = require("../service/authService");

const router = express.Router();

// Rota para iniciar o fluxo de autenticação
router.get("/login", (req, res) => {
  return res.redirect(getAuthUrl());
});

// Rota de callback após autenticação
router.get("/auth/callback", async (req, res) => {
  console.log("[auth callback] query:", req.query);
  const code = req.query.code;

  if (!code) {
    console.warn("[auth callback] código ausente");
    return res.status(400).send("Código de autenticação não fornecido.");
  }

  try {
    const tokens = await getTokenFromCode(code);

    // assegura sessão e marca usuário como autenticado
    if (!req.session) req.session = {};
    req.session.tokens = tokens;
    req.session.user = { authenticated: true }; // flag simples; adicione info real se quiser

    // salva session antes do redirect
    req.session.save((err) => {
      if (err) {
        console.error("[auth callback] erro ao salvar sessão:", err);
        return res.status(500).send("Erro ao salvar sessão.");
      }
      console.log("[auth callback] sessão salva, redirecionando");
      return res.redirect("/public/index.html");
    });
  } catch (error) {
    console.error("[auth callback] Erro ao obter tokens:", error.response?.data || error.message || error);
    return res.status(500).send("Erro ao processar a autenticação. Veja logs do servidor.");
  }
});

module.exports = router;