import express from 'express';
import cors from 'cors';
import path from 'node:path';
import fs from 'node:fs';
import { fileURLToPath } from 'node:url';
import { config } from './config.js';
import { seed } from './db.js';
import { authRouter } from './routes/auth.js';
import { usersRouter } from './routes/users.js';
import { profileRouter } from './routes/profile.js';
import { mailRouter } from './routes/mail.js';
import { trainingRouter } from './routes/training.js';
import { settingsRouter } from './routes/settings.js';
import { generateRouter } from './routes/generate.js';
import { applicationRouter } from './routes/application.js';
import { emailsRouter } from './routes/emails.js';
import { statsRouter } from './routes/stats.js';
import { getSetting } from './db.js';
import { pollAllUsers } from './services/engine.js';

seed();

const app = express();
app.use(cors());
app.use(express.json({ limit: '5mb' }));

// Проверка живости
app.get('/api/health', (req, res) => res.json({ ok: true }));

app.use('/api/auth', authRouter);
app.use('/api/users', usersRouter);
app.use('/api/profile', profileRouter);
app.use('/api/mail', mailRouter);
app.use('/api/training', trainingRouter);
app.use('/api/settings', settingsRouter);
app.use('/api/generate', generateRouter);
app.use('/api/application', applicationRouter);
app.use('/api/emails', emailsRouter);
app.use('/api/stats', statsRouter);

// Обработчик неизвестных API-роутов
app.use('/api', (req, res) => res.status(404).json({ error: 'Не найдено' }));

// В production отдаём собранный фронтенд (client/dist) с этого же сервера —
// один origin, без отдельного веб-сервера и CORS.
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const clientDist = path.join(__dirname, '..', '..', 'client', 'dist');
if (fs.existsSync(clientDist)) {
  app.use(express.static(clientDist));
  // SPA-фолбэк: любой не-API GET отдаёт index.html
  app.use((req, res, next) => {
    if (req.method !== 'GET' || req.path.startsWith('/api')) return next();
    res.sendFile(path.join(clientDist, 'index.html'));
  });
  console.log('[server] фронтенд раздаётся из client/dist');
}

app.listen(config.port, () => {
  console.log(`[server] API запущен на http://localhost:${config.port}`);
});

// Периодический опрос почты всех пользователей с включённым автоответчиком.
const intervalSec = Math.max(30, Number(getSetting('poll_interval_seconds')) || 60);
console.log(`[engine] опрос почты каждые ${intervalSec} сек`);
setInterval(() => {
  pollAllUsers().catch((e) => console.error('[engine] pollAllUsers:', e.message));
}, intervalSec * 1000);
