<?php

namespace App\Http\Controllers;

use App\Models\PrecioDia;
use App\Models\TipoCombustible;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class PreciosDiaController extends Controller
{
    public function index()
    {
        $items = PrecioDia::with('tipoCombustible')
            ->orderBy('fecha', 'desc')
            ->orderBy('id', 'desc')
            ->get();

        $ultimoPrecio = PrecioDia::with('tipoCombustible')
            ->orderBy('fecha', 'desc')
            ->orderBy('id', 'desc')
            ->first();

        return view('precios_dia.index', compact('items', 'ultimoPrecio'));
    }

    public function create()
    {
        $tipos = TipoCombustible::orderBy('nombre')->get();
        return view('precios_dia.create', compact('tipos'));
    }

    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'fecha' => 'required|date',
            'tipo_combustible' => 'required|integer',
            'precio_turno_manana' => 'required|numeric|min:0.01',
            'precio_turno_tarde' => 'required|numeric|min:0.01',
            'precio_turno_noche' => 'required|numeric|min:0.01',
            'i_estado' => 'nullable|boolean',
        ], [
            'precio_turno_manana.required' => 'El precio debe ser mayor a cero soles',
            'precio_turno_manana.numeric' => 'El precio debe ser mayor a cero soles',
            'precio_turno_manana.min' => 'El precio debe ser mayor a cero soles',
            'precio_turno_tarde.required' => 'El precio debe ser mayor a cero soles',
            'precio_turno_tarde.numeric' => 'El precio debe ser mayor a cero soles',
            'precio_turno_tarde.min' => 'El precio debe ser mayor a cero soles',
            'precio_turno_noche.required' => 'El precio debe ser mayor a cero soles',
            'precio_turno_noche.numeric' => 'El precio debe ser mayor a cero soles',
            'precio_turno_noche.min' => 'El precio debe ser mayor a cero soles',
        ]);

        if ($validator->fails()) {
            return redirect()->back()->withErrors($validator)->withInput();
        }

        $data = $validator->validated();

        $data['i_estado'] = $request->has('i_estado') ? 1 : 0;
        $data['precio_turno_manana'] = is_null($data['precio_turno_manana'] ?? null) || $data['precio_turno_manana'] === '' ? 0.00 : (float)$data['precio_turno_manana'];
        $data['precio_turno_tarde'] = is_null($data['precio_turno_tarde'] ?? null) || $data['precio_turno_tarde'] === '' ? 0.00 : (float)$data['precio_turno_tarde'];
        $data['precio_turno_noche'] = is_null($data['precio_turno_noche'] ?? null) || $data['precio_turno_noche'] === '' ? 0.00 : (float)$data['precio_turno_noche'];

        PrecioDia::create($data);
        return redirect()->route('precios_dia.index')->with('success', 'Precio diario creado.');
    }

    public function edit(string $id)
    {
        $item = PrecioDia::findOrFail($id);
        $tipos = TipoCombustible::orderBy('nombre')->get();
        return view('precios_dia.edit', compact('item', 'tipos'));
    }

    public function update(Request $request, string $id)
    {
        $item = PrecioDia::findOrFail($id);

        $validator = Validator::make($request->all(), [
            'fecha' => 'required|date',
            'tipo_combustible' => 'required|integer',
            'precio_turno_manana' => 'required|numeric|min:0.01',
            'precio_turno_tarde' => 'required|numeric|min:0.01',
            'precio_turno_noche' => 'required|numeric|min:0.01',
            'i_estado' => 'nullable|boolean',
        ], [
            'precio_turno_manana.required' => 'El precio debe ser mayor a cero soles',
            'precio_turno_manana.numeric' => 'El precio debe ser mayor a cero soles',
            'precio_turno_manana.min' => 'El precio debe ser mayor a cero soles',
            'precio_turno_tarde.required' => 'El precio debe ser mayor a cero soles',
            'precio_turno_tarde.numeric' => 'El precio debe ser mayor a cero soles',
            'precio_turno_tarde.min' => 'El precio debe ser mayor a cero soles',
            'precio_turno_noche.required' => 'El precio debe ser mayor a cero soles',
            'precio_turno_noche.numeric' => 'El precio debe ser mayor a cero soles',
            'precio_turno_noche.min' => 'El precio debe ser mayor a cero soles',
        ]);

        if ($validator->fails()) {
            return redirect()->back()->withErrors($validator)->withInput();
        }

        $data = $validator->validated();

        $data['i_estado'] = $request->has('i_estado') ? 1 : 0;
        $data['precio_turno_manana'] = is_null($data['precio_turno_manana'] ?? null) || $data['precio_turno_manana'] === '' ? 0.00 : (float)$data['precio_turno_manana'];
        $data['precio_turno_tarde'] = is_null($data['precio_turno_tarde'] ?? null) || $data['precio_turno_tarde'] === '' ? 0.00 : (float)$data['precio_turno_tarde'];
        $data['precio_turno_noche'] = is_null($data['precio_turno_noche'] ?? null) || $data['precio_turno_noche'] === '' ? 0.00 : (float)$data['precio_turno_noche'];

        $item->update($data);
        return redirect()->route('precios_dia.index')->with('success', 'Precio diario actualizado.');
    }

    public function destroy(string $id)
    {
        $item = PrecioDia::findOrFail($id);
        $item->delete();
        return redirect()->route('precios_dia.index')->with('success', 'Precio diario eliminado.');
    }
}

