import pool from '../db.js';
import * as sectorService from '../services/sector.service.js';

/**
 * Liefert alle Sektoren für das Frontend.
 * Übergibt die HTTP-Anfrage an den zuständigen Service und liefert das Ergebnis aus.
 */
export const getSectorsList = async (req, res) => {
    const accountId = req.user.accountId;

    try {
        const sectorData = await sectorService.getSectorsList(accountId);

        return res.status(200).json({
            success: true,
            ...sectorData
        });

    } catch (error) {
        console.error('[SectorController] Fehler in getSectorsList:', error);

        return res.status(500).json({
            error: 'ERR_INTERNAL_SERVER'
        });
    }
};

/**
 * Verarbeitet den Beitritt eines Spielers zu einem spezifischen Sektor.
 * Sendet einen internen Request an das Sektor-Backend, um dort den Account
 * und den Heimatplaneten generieren zu lassen.
 * 
 * @param {import('express').Request} req - Das Express Request-Objekt
 * @param {import('express').Response} res - Das Express Response-Objekt
 */
export const joinSector = async (req, res) => {
    const accountId = req.user.accountId; 
        const { sectorId, localUsername, gender } = req.body;

    // Basis-Validierung: Fehlt ein Feld, brechen wir ab
    if (!sectorId || !localUsername || !gender) {
        return res.status(400).json({ 
            error: 'ERR_MISSING_FIELDS' 
        });
    }

    try {
        await sectorService.joinSector(accountId, sectorId, localUsername, gender);
        
        return res.status(200).json({ 
            message: 'MSG_SECTOR_JOINED_SUCCESS' 
        });

    } catch (error) {
        console.error('[SectorController] Fehler beim Beitritt zum Sektor:', error.message);
        
        if (error.code) {
            return res.status(error.code === 'ERR_SECTOR_FULL' ? 503 : 409).json({ 
                error: error.code 
            });
        }

        return res.status(500).json({ 
            error: 'ERR_INTERNAL_SERVER' 
        });
    }
};