<?php

namespace App\Http\Controllers\Codigo;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
//creados por el usuario

use App\Models\Codigo\CodigoEgreso;
use Illuminate\Validation\Rule;
use Illuminate\Support\Facades\DB;
class CodigoEgresoController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index()
    {   
        $id_sede = isset(auth()->user()->id_sede) ? auth()->user()->id_sede : null;

        if (is_null($id_sede) || (int)$id_sede <= 0) {
            abort(403, 'No puede acceder: no tiene una sede asignada.');
        }
        $items = CodigoEgreso::noEliminados()
            ->where('id_sede', $id_sede)
            ->orderBy('codigo', 'asc')   // ascendente
            ->paginate(10);

        return view('Codigo.codigo_egreso.index', compact('items'));
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        return view('Codigo.codigo_egreso.create');
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {   $id_sede=Auth()->user()->id_sede;
        //echo "ID SEDE: $id_sede";

        $data = $request->validate([
            'codigo' => [
                'required',
                'string',
                'max:15', // según tu migración (string 15)
                Rule::unique('codigo_egresos', 'codigo')->where(function ($q) use ($id_sede) {
                    // Unicidad por sede (y opcionalmente ignorando eliminados)
                    return $q->where('id_sede', $id_sede)
                            ->where('estado', '!=', 'EL');
                }),
            ],
            'nombre' => ['required', 'string', 'max:100'],
            'estado' => ['required', 'in:AC,IN'],
        ], [
            'codigo.unique' => 'El código ya existe para esta sede.',
        ]);

        $data['nombre'] = mb_strtoupper(trim($data['nombre']), 'UTF-8');
        $data['id_sede'] = $id_sede;

        CodigoEgreso::create($data);

        return redirect()->route('admin.codigo-egreso.index')
        ->with('ok', 'Codigo Egreso creado correctamente.');
    }

    /**
     * Display the specified resource.
     */
    public function show(string $id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(CodigoEgreso $codigo_egreso)
    {
        return view('Codigo.codigo_egreso.edit', ['item' => $codigo_egreso]);
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, CodigoEgreso $codigo_egreso)
    {
        $id_sede = auth()->user()->id_sede;

        // 1) Seguridad: que solo pueda editar registros de su misma sede
        abort_if((int) $codigo_egreso->id_sede !== (int) $id_sede, 403, 'No autorizado.');

        // 2) Validación: código único por sede (ignorando el propio registro y opcionalmente EL)
        $data = $request->validate([
            'codigo' => [
                'required',
                'string',
                'max:15',
                Rule::unique('codigo_egresos', 'codigo')
                    ->ignore($codigo_egreso->id)
                    ->where(function ($q) use ($id_sede) {
                        return $q->where('id_sede', $id_sede)
                                ->where('estado', '!=', 'EL');
                    }),
            ],
            'nombre' => ['required', 'string', 'max:100'],
            'estado' => ['required', 'in:AC,IN'],
        ], [
            'codigo.unique' => 'Ya existe ese código en esta sede.',
        ]);

        $data['codigo'] = trim($data['codigo']);
        $data['nombre'] = mb_strtoupper(trim($data['nombre']), 'UTF-8');

        $codigo_egreso->update($data);

        return redirect()->route('admin.codigo-egreso.index')
            ->with('ok', 'Código Egreso actualizado correctamente.');
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(CodigoEgreso $codigo_egreso)
    {
        // Eliminación lógica
        $codigo_egreso->update(['estado' => 'EL']);

        return redirect()->route('admin.codigo-egreso.index')
            ->with('ok', 'Código Egreso eliminado (lógico) correctamente.');
    }

    public function ajaxCodigoEgreso($id_sede)
    {
        $data = DB::table('codigo_egresos')
            ->select('id', 'codigo', 'nombre')
            ->where('id_sede', $id_sede)
            ->where('estado', '<>', 'EL')
            ->orderBy('codigo', 'asc')
            ->get();

        return response()->json($data);
    }
}
