<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Deposit;

class DepositController extends Controller
{
    public function index(Request $request)
    {
        $perPage = $request->get('per_page', 10);
        $search = $request->get('search', '');

        $query = Deposit::query();

        if ($search) {
            $query->where('name', 'like', "%{$search}%");
        }

        $deposits = $query->orderBy('id', 'desc')->paginate($perPage);

        return response()->json([
            'success' => true,
            'deposits' => $deposits
        ]);
    }

    public function store(Request $request)
    {
        $validatedData = $request->validate([
            'name' => 'required|string|max:255|unique:deposits,name',
            'address' => 'required|string|max:255',
        ], [
            'name.required' => 'El nombre es obligatorio.',
            'name.string' => 'El nombre debe ser una cadena de texto.',
            'name.max' => 'El nombre no debe exceder los 255 caracteres.',
            'name.unique' => 'El nombre ya está registrado.',
            'address.required' => 'La dirección es obligatoria.',
            'address.string' => 'La dirección debe ser una cadena de texto.',
            'address.max' => 'La dirección no debe exceder los 255 caracteres.',
        ]);

        $deposit = Deposit::create($validatedData);

        return response()->json([
            'success' => true,
            'message' => 'Depósito creado exitosamente',
            'data' => $deposit
        ], 201);
    }

    public function update(Request $request, $id)
    {
        $deposit = Deposit::findOrFail($id);

        $validatedData = $request->validate([
            'name' => 'required|string|max:255|unique:deposits,name,' . $deposit->id,
            'address' => 'required|string|max:255',
        ], [
            'name.required' => 'El nombre es obligatorio.',
            'name.string' => 'El nombre debe ser una cadena de texto.',
            'name.max' => 'El nombre no debe exceder los 255 caracteres.',
            'name.unique' => 'El nombre ya está registrado.',
            'address.required' => 'La dirección es obligatoria.',
            'address.string' => 'La dirección debe ser una cadena de texto.',
            'address.max' => 'La dirección no debe exceder los 255 caracteres.',
        ]);

        $deposit->update($validatedData);

        return response()->json([
            'success' => true,
            'message' => 'Depósito actualizado exitosamente',
            'data' => $deposit
        ]);
    }

    public function destroy($id)
    {
        $deposit = Deposit::findOrFail($id);
        $deposit->delete();

        return response()->json([
            'success' => true,
            'message' => 'Depósito eliminado exitosamente'
        ]);
    }

    public function show($id)
    {
        $deposit = Deposit::findOrFail($id);

        return response()->json([
            'success' => true,
            'data' => $deposit
        ]);
    }
}
