/**
 * DocuAgro - Entry Point
 * Inicia o bot Telegram e o servidor API
 */

require('dotenv').config();

const express = require('express');
const cors = require('cors');
const helmet = require('helmet');
const compression = require('compression');
const path = require('path');

const { criarBot } = require('./bot/telegram-bot');
const routes = require('./api/routes');

// Valida variáveis de ambiente obrigatórias
const requiredEnv = ['TELEGRAM_BOT_TOKEN', 'OPENAI_API_KEY'];
for (const env of requiredEnv) {
  if (!process.env[env]) {
    console.error(`❌ Variável de ambiente ${env} não configurada!`);
    console.error('📝 Copie .env.example para .env e preencha os valores.');
    process.exit(1);
  }
}

// Roda setup do banco se não existir
const fs = require('fs');
const dbPath = process.env.DB_PATH || path.join(__dirname, '..', 'data', 'docuagro.db');
if (!fs.existsSync(dbPath)) {
  console.log('📦 Banco de dados não encontrado. Criando...');
  require('./setup-db');
}

// ============================================================
// SERVIDOR EXPRESS (API + Painel)
// ============================================================
const app = express();

// Middlewares
app.use(helmet({ contentSecurityPolicy: false }));
app.use(compression());
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

// Arquivos estáticos (painel web)
app.use(express.static(path.join(__dirname, '..', 'public')));

// Rotas da API
app.use(routes);

// Fallback para SPA (painel)
app.get('*', (req, res) => {
  if (!req.path.startsWith('/api')) {
    res.sendFile(path.join(__dirname, '..', 'public', 'index.html'));
  }
});

const PORT = process.env.PORT || 3100;
app.listen(PORT, () => {
  console.log(`\n🌐 Servidor API rodando em http://localhost:${PORT}`);
  console.log(`📊 Painel web em http://localhost:${PORT}`);
});

// ============================================================
// BOT TELEGRAM
// ============================================================
const bot = criarBot();

bot.launch()
  .then(() => {
    console.log('🤖 Bot Telegram DocuAgro iniciado!');
    console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
    console.log('🌱 DocuAgro v1.0 - Compliance EUDR');
    console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
  })
  .catch(err => {
    console.error('❌ Erro ao iniciar bot:', err.message);
    if (err.message.includes('401')) {
      console.error('⚠️  Token do Telegram inválido! Verifique TELEGRAM_BOT_TOKEN no .env');
    }
  });

// Graceful shutdown
process.once('SIGINT', () => {
  console.log('\n🛑 Desligando DocuAgro...');
  bot.stop('SIGINT');
  process.exit(0);
});

process.once('SIGTERM', () => {
  bot.stop('SIGTERM');
  process.exit(0);
});
