/**
 * DocuAgro - Rotas da API REST
 * Endpoints para o painel web da cooperativa
 * Com autenticação JWT
 */

const express = require('express');
const path = require('path');
const fs = require('fs');
const db = require('../services/database');
const { gerarDossie } = require('../services/pdf-service');
const { autenticarUsuario, verificarToken } = require('../services/auth-service');

const router = express.Router();

// ============================================================
// MIDDLEWARE DE AUTENTICAÇÃO JWT
// ============================================================
function authMiddleware(req, res, next) {
  const authHeader = req.headers.authorization;

  if (!authHeader || !authHeader.startsWith('Bearer ')) {
    return res.status(401).json({
      sucesso: false,
      erro: 'Token de autenticação não fornecido'
    });
  }

  const token = authHeader.split(' ')[1];

  try {
    const usuario = verificarToken(token);
    req.usuario = usuario;
    next();
  } catch (erro) {
    return res.status(401).json({
      sucesso: false,
      erro: 'Token inválido ou expirado'
    });
  }
}

// ============================================================
// AUTH - Login (rota pública)
// ============================================================
router.post('/api/auth/login', async (req, res) => {
  try {
    const { username, senha } = req.body;

    if (!username || !senha) {
      return res.status(400).json({
        sucesso: false,
        erro: 'Username e senha são obrigatórios'
      });
    }

    const resultado = await autenticarUsuario(username, senha);

    res.json({
      sucesso: true,
      dados: resultado
    });
  } catch (erro) {
    console.error('❌ Erro no login:', erro.message);
    res.status(401).json({
      sucesso: false,
      erro: 'Credenciais inválidas'
    });
  }
});

// ============================================================
// HEALTH CHECK (rota pública)
// ============================================================
router.get('/api/health', (req, res) => {
  res.json({
    status: 'ok',
    servico: 'DocuAgro API',
    versao: '1.0.0',
    timestamp: new Date().toISOString()
  });
});

// ============================================================
// PROTEGER TODAS AS ROTAS /api/ ABAIXO COM AUTH
// ============================================================
router.use('/api', authMiddleware);

// ============================================================
// DASHBOARD - Estatísticas gerais
// ============================================================
router.get('/api/dashboard', (req, res) => {
  try {
    const stats = db.estatisticas();
    res.json({
      sucesso: true,
      dados: stats
    });
  } catch (erro) {
    console.error('❌ Erro no dashboard:', erro);
    res.status(500).json({ sucesso: false, erro: 'Erro ao buscar estatísticas' });
  }
});

// ============================================================
// PRODUTORES - Listagem
// ============================================================
router.get('/api/produtores', (req, res) => {
  try {
    const produtores = db.listarProdutores();
    res.json({
      sucesso: true,
      dados: produtores,
      total: produtores.length
    });
  } catch (erro) {
    console.error('❌ Erro ao listar produtores:', erro);
    res.status(500).json({ sucesso: false, erro: 'Erro ao listar produtores' });
  }
});

// ============================================================
// PRODUTOR - Detalhe
// ============================================================
router.get('/api/produtores/:id', (req, res) => {
  try {
    const produtor = db.buscarProdutorPorId(req.params.id);
    if (!produtor) {
      return res.status(404).json({ sucesso: false, erro: 'Produtor não encontrado' });
    }
    
    const documentos = db.buscarDocumentos(produtor.id);
    const ultimoDossie = db.buscarUltimoDossie(produtor.id);
    
    res.json({
      sucesso: true,
      dados: {
        produtor,
        documentos,
        ultimoDossie
      }
    });
  } catch (erro) {
    console.error('❌ Erro ao buscar produtor:', erro);
    res.status(500).json({ sucesso: false, erro: 'Erro ao buscar produtor' });
  }
});

// ============================================================
// DOSSIÊ - Gerar
// ============================================================
router.post('/api/produtores/:id/dossie', async (req, res) => {
  try {
    const produtor = db.buscarProdutorPorId(req.params.id);
    if (!produtor) {
      return res.status(404).json({ sucesso: false, erro: 'Produtor não encontrado' });
    }
    
    const caminhoArquivo = await gerarDossie(produtor.id);
    
    res.json({
      sucesso: true,
      dados: {
        arquivo: path.basename(caminhoArquivo),
        caminho: `/api/dossie/download/${path.basename(caminhoArquivo)}`
      }
    });
  } catch (erro) {
    console.error('❌ Erro ao gerar dossiê:', erro);
    res.status(500).json({ sucesso: false, erro: 'Erro ao gerar dossiê' });
  }
});

// ============================================================
// DOSSIÊ - Download
// ============================================================
router.get('/api/dossie/download/:arquivo', (req, res) => {
  try {
    const uploadDir = process.env.UPLOAD_DIR || path.join(__dirname, '..', '..', 'uploads');
    const caminhoArquivo = path.join(uploadDir, 'dossies', req.params.arquivo);
    
    if (!fs.existsSync(caminhoArquivo)) {
      return res.status(404).json({ sucesso: false, erro: 'Arquivo não encontrado' });
    }
    
    res.download(caminhoArquivo);
  } catch (erro) {
    console.error('❌ Erro no download:', erro);
    res.status(500).json({ sucesso: false, erro: 'Erro no download' });
  }
});

// ============================================================
// EXPORTAÇÃO CSV
// ============================================================
router.get('/api/exportar/csv', (req, res) => {
  try {
    const produtores = db.listarProdutores();
    
    // Header CSV
    let csv = 'Nome,CPF/CNPJ,Propriedade,Município,Estado,Área (ha),Cultura,Status,Docs Aprovados,Total Docs\n';
    
    for (const p of produtores) {
      csv += [
        `"${p.nome || ''}"`,
        `"${p.cpf_cnpj || ''}"`,
        `"${p.propriedade_nome || ''}"`,
        `"${p.propriedade_municipio || ''}"`,
        `"${p.propriedade_estado || ''}"`,
        p.propriedade_area_ha || '',
        `"${p.cultura_principal || ''}"`,
        p.status || '',
        p.docs_aprovados || 0,
        p.docs_total || 8
      ].join(',') + '\n';
    }
    
    res.setHeader('Content-Type', 'text/csv; charset=utf-8');
    res.setHeader('Content-Disposition', 'attachment; filename=docuagro_produtores.csv');
    res.send(csv);
    
  } catch (erro) {
    console.error('❌ Erro na exportação CSV:', erro);
    res.status(500).json({ sucesso: false, erro: 'Erro na exportação' });
  }
});

module.exports = router;
