<?php

namespace App\Http\Controllers;

use App\Models\CronogramaFacturacion;
use Illuminate\Http\Request;
use App\Models\Sector;
class CronogramaFacturacionController extends Controller
{
    public function index()
    {
        $cronogramas = CronogramaFacturacion::with('sector')->get(); // ideal para evitar N+1
        $sectores = Sector::all();
        return view('cronogramas.index', compact('cronogramas', 'sectores'));
    }


   public function store(Request $request)
{
    $request->validate([
        'nombre_cronograma'      => 'required|string|max:100',
        'periodicidad'           => 'required|in:Mensual,Bimestral,Trimestral',
        'anio'                   => 'required|integer|min:2000|max:2100',
        'mes'                    => 'required|integer|min:1|max:12',
        'fecha_inicio_lectura'   => 'required|date',
        'fecha_fin_lectura'      => 'required|date|after_or_equal:fecha_inicio_lectura',
        'fecha_procesamiento'    => 'required|date',
        'fecha_emision'          => 'required|date',
        'fecha_inicio_cobro'     => 'required|date',
        'fecha_fin_cobro'        => 'required|date|after_or_equal:fecha_inicio_cobro',
        'fecha_corte_servicio'   => 'nullable|date',
        'id_sector'              => 'nullable|integer|exists:sector,id_sector',
        'estado'                 => 'required|in:Activo,Inactivo',
    ]);

    CronogramaFacturacion::create($request->all());

    return response()->json(['message' => 'Cronograma creado correctamente']);
}

public function update(Request $request, $id)
{
    $cronograma = CronogramaFacturacion::findOrFail($id);

    $request->validate([
        'nombre_cronograma'      => 'required|string|max:100',
        'periodicidad'           => 'required|in:Mensual,Bimestral,Trimestral',
        'anio'                   => 'required|integer|min:2000|max:2100',
        'mes'                    => 'required|integer|min:1|max:12',
        'fecha_inicio_lectura'   => 'required|date',
        'fecha_fin_lectura'      => 'required|date|after_or_equal:fecha_inicio_lectura',
        'fecha_procesamiento'    => 'required|date',
        'fecha_emision'          => 'required|date',
        'fecha_inicio_cobro'     => 'required|date',
        'fecha_fin_cobro'        => 'required|date|after_or_equal:fecha_inicio_cobro',
        'fecha_corte_servicio'   => 'nullable|date',
        'id_sector'              => 'nullable|integer|exists:sector,id_sector',
        'estado'                 => 'required|in:Activo,Inactivo',
    ]);

    $cronograma->update($request->all());

    return response()->json(['message' => 'Cronograma actualizado correctamente']);
}


    public function destroy($id)
    {
        $cronograma = CronogramaFacturacion::findOrFail($id);
        $cronograma->delete();

        return response()->json(['message' => 'Cronograma eliminado correctamente']);
    }


    public function filtrar(Request $request)
{
    $query = CronogramaFacturacion::with('sector');

    if ($request->sector) {
        $query->where('id_sector', $request->sector);
    }
    if ($request->anio) {
        $query->where('anio', $request->anio);
    }
    if ($request->mes) {
        $query->where('mes', $request->mes);
    }

    $cronogramas = $query->get();

    return response()->json(['data' => $cronogramas]);
}

public function mesesPorAnio($anio)
{
    // Traer solo meses de cronogramas activos para ese año
    $meses = CronogramaFacturacion::where('anio', $anio)
        ->where('estado', 'Activo')
        ->distinct()
        ->pluck('mes'); // devuelve colección de meses

    return response()->json($meses); // ej: [1,2,3,7]
}


}
