<?php

namespace App\Http\Controllers;

use App\Models\Ajustador;
use App\Models\TarifaAjustador;
use Illuminate\Http\Request;

class AjustadorController extends Controller
{
    public function index(Request $request)
    {
        $query = Ajustador::query()->with('tarifas');

        if ($request->search) {
            $query->where('nombre', 'like', "%{$request->search}%")
                ->orWhere('ruc', 'like', "%{$request->search}%");
        }

        if ($request->tipo) {
            $query->where('tipo', $request->tipo);
        }

        $ajustadores = $query->orderBy('nombre')->paginate(20);

        return inertia('Catalogos/Ajustadores', [
            'title' => 'Ajustadores',
            'ajustadores' => $ajustadores,
            'tipos' => ['liviano', 'pesado', 'express', 'virtual', 'particular'],
            'filtros' => $request->only(['search', 'tipo']),
        ]);
    }

    public function store(Request $request)
    {
        $request->validate([
            'ruc' => 'required|unique:ajustadores,ruc',
            'nombre' => 'required|string',
            'tipo' => 'required|in:liviano,pesado,express,virtual,particular',
            'email' => 'required|email|unique:ajustadores,email',
        ]);

        // Generar contraseña aleatoria
        $password = substr(str_shuffle('ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz23456789@#$'), 0, 10);

        $ajustador = Ajustador::create([
            'ruc' => $request->ruc,
            'nombre' => $request->nombre,
            'tipo' => $request->tipo,
            'telefono' => $request->telefono,
            'email' => $request->email,
            'password' => $password,
            'ciudad' => $request->ciudad,
            'tarifa_dp' => $request->tarifa_dp ?? 0,
            'tarifa_rc' => $request->tarifa_rc ?? 0,
            'codigo_sistema' => 'ADJ-'.strtoupper(substr($request->ruc, 0, 8)),
        ]);

        // Crear tarifas
        if ($request->tarifas) {
            foreach ($request->tarifas as $tarifa) {
                TarifaAjustador::create([
                    'ajustador_id' => $ajustador->id,
                    'tipo_vehiculo' => $tarifa['tipo'],
                    'valor' => $tarifa['valor'],
                ]);
            }
        }

        return back()->with([
            'message' => 'Ajustador creado',
            'ajustador_password' => $password,
            'ajustador_email' => $request->email,
        ]);
    }

    public function update(Request $request, Ajustador $ajustador)
    {
        $request->validate([
            'ruc' => 'required|unique:ajustadores,ruc,'.$ajustador->id,
            'nombre' => 'required|string',
            'tipo' => 'required|in:liviano,pesado,express,virtual,particular',
        ]);

        $ajustador->update($request->only([
            'nombre',
            'tipo',
            'telefono',
            'email',
            'ciudad',
            'tarifa_dp',
            'tarifa_rc',
        ]));

        // Actualizar tarifas
        if ($request->tarifas) {
            $ajustador->tarifas()->delete();
            foreach ($request->tarifas as $tarifa) {
                TarifaAjustador::create([
                    'ajustador_id' => $ajustador->id,
                    'tipo_vehiculo' => $tarifa['tipo'],
                    'valor' => $tarifa['valor'],
                ]);
            }
        }

        return back()->with('message', 'Ajustador actualizado');
    }

    public function destroy(Ajustador $ajustador)
    {
        $ajustador->delete();

        return back()->with('message', 'Ajustador eliminado');
    }

    public function resetPassword(Ajustador $ajustador)
    {
        $password = substr(str_shuffle('ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz23456789@#$'), 0, 10);
        $ajustador->update(['password' => $password]);

        return back()->with([
            'message' => 'Contraseña restablecida para '.$ajustador->nombre,
            'ajustador_password' => $password,
            'ajustador_email' => $ajustador->email,
        ]);
    }
}
