// server-init.js
const path = require('path');
const fs = require('fs');
const { setupUploadMiddleware } = require('./upload-middleware');
const { setupTaskEndpoints } = require('./task-endpoints');

async function initializeServer(app) {
    console.log('🚀 Инициализация сервера...');
    
    try {
        const { initializeDatabase, getDb, isInitialized } = require('./database');
        const authService = require('./auth');
        const postgresLogger = require('./postgres');
        
        // 1. Инициализируем базу данных
        console.log('🔧 Инициализация базы данных...');
        await initializeDatabase();
        
        // 2. Получаем объект БД
        const db = getDb();
        console.log('✅ База данных готова');
        
        // 3. Настраиваем authService с БД
        authService.setDatabase(db);
        console.log('✅ Сервис аутентификации готов');
        
        // 4. Настраиваем загрузку файлов
        const upload = setupUploadMiddleware();
        console.log('✅ Middleware загрузки файлов настроен');
        
        // 5. Настраиваем endpoint'ы для задач
        setupTaskEndpoints(app, db, upload);
        console.log('✅ Endpoint\'ы задач настроены');
        
        // 6. Загружаем админ роутер
        try {
            const adminRouter = require('./admin-server');
            console.log('Admin router loaded:', adminRouter);
            console.log('Type:', typeof adminRouter);
            
            if (adminRouter && typeof adminRouter === 'function') {
                app.use(adminRouter);
                console.log('✅ Админ роутер подключен');
            } else {
                console.error('❌ Admin router is not a valid middleware function');
                // Создаем заглушку, чтобы сервер работал
                const express = require('express');
                const stubRouter = express.Router();
                stubRouter.get('*', (req, res) => {
                    res.status(501).json({ error: 'Admin router not available' });
                });
                app.use(stubRouter);
                console.log('⚠️  Используется заглушка для админ роутера');
            }
        } catch (error) {
            console.error('❌ Ошибка загрузки админ роутера:', error.message);
            console.error('Stack:', error.stack);
            
            // Создаем заглушку, чтобы сервер не падал
            const express = require('express');
            const stubRouter = express.Router();
            stubRouter.get('*', (req, res) => {
                res.status(503).json({ 
                    error: 'Admin panel temporarily unavailable',
                    message: error.message 
                });
            });
            app.use(stubRouter);
            console.log('⚠️  Создана заглушка для админ роутера из-за ошибки');
        }
        
        console.log('✅ Сервер полностью инициализирован');
        
        return { db, upload };
        
    } catch (error) {
        console.error('❌ Ошибка инициализации сервера:', error.message);
        console.error(error.stack);
        throw error;
    }
}

module.exports = { initializeServer };