<?php

class ElectricityBill
{
    /**
     * Obtener configuraciones de todos los periodos de un año
     */
    public static function getYear($year)
    {
        $db = Database::getInstance();

        $bills = $db->fetchAll(
            "SELECT * FROM electricity_bills WHERE year = ? ORDER BY FIELD(period, 'Ene-Feb', 'Mar-Abr', 'May-Jun', 'Jul-Ago', 'Sep-Oct', 'Nov-Dic')",
        [$year]
        );

        // Organizar por periodo
        $result = [];
        foreach ($bills as $bill) {
            $result[$bill['period']] = $bill;
        }

        return $result;
    }

    /**
     * Guardar o actualizar configuración de un periodo
     */
    public static function save($data, $userId)
    {
        $db = Database::getInstance();

        $id = $data['id'] ?? null;
        $year = $data['year'];
        $period = $data['period'];
        $totalAmount = $data['total_amount'] ?? 0;
        $amountPerHouse = $data['amount_per_house'] ?? 0;
        $notes = $data['notes'] ?? '';

        if ($id) {
            // Actualizar existente
            $db->execute(
                "UPDATE electricity_bills 
                 SET total_amount = ?, amount_per_house = ?, notes = ?, updated_at = NOW() 
                 WHERE id = ?",
            [$totalAmount, $amountPerHouse, $notes, $id]
            );
            return $id;
        }
        else {
            // Insertar nuevo o actualizar si existe
            $db->execute(
                "INSERT INTO electricity_bills (year, period, total_amount, amount_per_house, notes) 
                 VALUES (?, ?, ?, ?, ?)
                 ON DUPLICATE KEY UPDATE 
                 total_amount = VALUES(total_amount),
                 amount_per_house = VALUES(amount_per_house),
                 notes = VALUES(notes),
                 updated_at = NOW()",
            [$year, $period, $totalAmount, $amountPerHouse, $notes]
            );
            return $db->lastInsertId();
        }
    }

    /**
     * Obtener periodos bimestrales
     */
    public static function getPeriods()
    {
        return [
            'Ene-Feb',
            'Mar-Abr',
            'May-Jun',
            'Jul-Ago',
            'Sep-Oct',
            'Nov-Dic'
        ];
    }

    /**
     * Obtener configuración de un periodo específico
     */
    public static function getByYearPeriod($year, $period)
    {
        $db = Database::getInstance();

        return $db->fetchOne(
            "SELECT * FROM electricity_bills WHERE year = ? AND period = ?",
        [$year, $period]
        );
    }
}