import { Elysia } from "elysia";
import cors from "@elysiajs/cors";
import { authController } from "./controllers/auth";
import { sessionController } from "./controllers/session";
import { companyController } from "./controllers/company";
import { branchController } from "./controllers/branch";
import { serverController } from "./controllers/server";
import { serverSessionService } from "./services/serverSession";

const app = new Elysia();

app.use(
  cors({
    origin: true,
    // credentials: true,
  })
);

app.use(authController);
app.use(sessionController);
app.use(companyController);
app.use(branchController);
app.use(serverController);

app.listen(3000);

console.log(
  `🦊 Elysia is running at ${app.server?.hostname}:${app.server?.port}`
);

// Запуск фоновой задачи для автоматического назначения серверов
const AUTO_ASSIGN_INTERVAL_MS = parseInt(
  process.env.AUTO_ASSIGN_INTERVAL_MS || "1000",
  10
); // 1 секунда по умолчанию

async function autoAssignServersTask() {
  try {
    const results = await serverSessionService.autoAssignServers();

    if (results.total > 0) {
      console.log(
        `[${new Date().toISOString()}] 🎯 Auto-assign: ${
          results.assigned
        } assigned, ${results.failed} failed из ${results.total}`
      );

      if (results.errors.length > 0) {
        console.error(
          `[${new Date().toISOString()}] ❌ Ошибки назначения:`,
          results.errors
        );
      }
    }
  } catch (error) {
    console.error(
      `[${new Date().toISOString()}] ❌ Ошибка auto-assign:`,
      error instanceof Error ? error.message : error
    );
  }

  // Планируем следующий запуск
  setTimeout(autoAssignServersTask, AUTO_ASSIGN_INTERVAL_MS);
}

// Запускаем через 1 секунду после старта сервера
setTimeout(() => {
  console.log(
    `[${new Date().toISOString()}] 🤖 Запуск фоновой задачи auto-assign (интервал: ${AUTO_ASSIGN_INTERVAL_MS}ms)`
  );
  autoAssignServersTask();
}, 1000);
