<?php

namespace App\Http\Controllers\Cuentas;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

//creados por el usuario
use App\Models\Cuentas\Cuenta;
use Illuminate\Validation\Rule;
class CuentaController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index()
    {   $id_sede=Auth()->user()->id_sede;
        if (is_null($id_sede) || (int)$id_sede <= 0) {
            abort(403, 'No puede acceder: no tiene una sede asignada.');
        }
        $items = Cuenta::noEliminados()
        ->where('id_sede', $id_sede)
        ->orderBy('tipo', 'asc')      // 1 (Soles) primero, luego 2 (Dólares)
        ->orderBy('banco', 'asc')    // luego por nombre
        ->paginate(10);

        return view('Cuentas.cuenta.index', compact('items'));
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        return view('Cuentas.cuenta.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('cuentas', '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'],
            'cuenta' => ['required', 'string', 'max:30'],
            'tipo' => ['required', 'in:1,2'],
            'banco' => ['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['cuenta'] = mb_strtoupper(trim($data['cuenta']), 'UTF-8');
        $data['banco'] = mb_strtoupper(trim($data['banco']), 'UTF-8');
        $data['id_sede'] = $id_sede;

        Cuenta::create($data);

        return redirect()->route('admin.cuenta.index')
        ->with('ok', 'Cuenta creado correctamente.');
    }

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

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(Cuenta $cuenta)
    {  // echo "AUTH ID SEDE: " . auth()->user()->id_sede . " - DATA Cuenta ID: " . $cuenta->id_sede;
       // dd($cuenta->toArray());  // solo atributos
        return view('Cuentas.cuenta.edit', ['item' => $cuenta]);
    }

    /**
     * Update the specified resource in storage.
     */
  

    public function update(Request $request, Cuenta $cuenta)
    {
        $id_sede = auth()->user()->id_sede;

        // 1) Seguridad: que solo pueda editar registros de su misma sede
        abort_if((int) $cuenta->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('cuentas', 'codigo')
                    ->ignore($cuenta->id)
                    ->where(function ($q) use ($id_sede) {
                        return $q->where('id_sede', $id_sede)
                                ->where('estado', '!=', 'EL');
                    }),
            ],
            'nombre' => ['required', 'string', 'max:100'],
            'cuenta' => ['required', 'string', 'max:30'],
            'tipo' => ['required', 'in:1,2'],
            'banco' => ['required', 'string', 'max:100'],
            'estado' => ['required', 'in:AC,IN'],
        ], [
            'codigo.unique' => 'Ya existe ese código en esta sede.',
        ]);

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

        $cuenta->update($data);

        return redirect()->route('admin.cuenta.index')
            ->with('ok', 'Cuenta actualizado correctamente.');
    }

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

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