<?php
namespace App\Imports;

use App\Models\Lectura;
use App\Models\Conexion;
use App\Models\Tarifa;
use Carbon\Carbon;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;

class LecturaImport implements ToCollection, WithHeadingRow
{
    public int $importados = 0;
    public array $errores = [];

    public function collection(Collection $rows)
    {
        foreach ($rows as $i => $row) {

            $fila = $i + 2;

            try {

                $conexion = Conexion::with('categoriaTarifa.tarifas')->find($row['id_conexion']);
                if (!$conexion) {
                    throw new \Exception("Fila {$fila}: Conexión no existe");
                }

                // Fecha del periodo
                $fechaPeriodo = Carbon::create(
                    $row['periodo_anio'],
                    $row['periodo_mes'],
                    1
                );

                // Tarifa vigente
                $tarifa = $conexion->categoriaTarifa
                    ->tarifas()
                    ->where('estado', 'Activo')
                    ->whereDate('vigencia_inicio', '<=', $fechaPeriodo)
                    ->where(function ($q) use ($fechaPeriodo) {
                        $q->whereNull('vigencia_fin')
                          ->orWhereDate('vigencia_fin', '>=', $fechaPeriodo);
                    })
                    ->orderByDesc('vigencia_inicio')
                    ->first();

                if (!$tarifa) {
                    throw new \Exception("Fila {$fila}: No hay tarifa vigente");
                }

                // Cálculo del monto (CLAVE)
                $consumo = (float) $row['consumo'];
                $excedente = max($consumo - $tarifa->tope_m3, 0);
                $monto = $tarifa->monto_fijo + ($excedente * $tarifa->monto_variable);

                Lectura::create([
                    'id_conexion'   => $row['id_conexion'],
                    'id_cronograma' => $row['id_cronograma'],
                    'periodo_anio'  => $row['periodo_anio'],
                    'periodo_mes'   => $row['periodo_mes'],
                    'fecha_lectura' => $row['fecha_lectura'] ?: now()->toDateString(),
                    'lectura'       => $row['lectura'],
                    'consumo'       => $consumo,
                    'monto'         => $monto,
                    'tipo_lectura'  => $row['tipo_lectura'],
                    'estado'        => $row['estado'],
                ]);

                $this->importados++;

            } catch (\Exception $e) {
                $this->errores[] = $e->getMessage();
            }
        }
    }
}
