<?php

namespace App\Http\Controllers;

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

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

        $query = Store::query();

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

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

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

    public function store(Request $request)
    {
        $validatedData = $request->validate([
            'name' => 'required|string|max:255|unique:stores,name',
            'address' => 'required|string|max:255',
            'type' => 'required|string|max:50',
        ], [
            '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.',
        ]);

        $store = Store::create($validatedData);

        return response()->json([
            'success' => true,
            'message' => 'Tienda creada exitosamente',
            'data' => $store
        ], 201);
    }

    public function update(Request $request, $id)
    {
        $store = Store::findOrFail($id);

        $validatedData = $request->validate([
            'name' => 'required|string|max:255|unique:stores,name,' . $store->id,
            'address' => 'required|string|max:255',
            'type' => 'required|string|max:50',
        ], [
            '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.',
        ]);

        $store->update($validatedData);

        return response()->json([
            'success' => true,
            'message' => 'Tienda actualizada exitosamente',
            'data' => $store
        ]);
    }

    public function destroy($id)
    {
        $store = Store::findOrFail($id);
        $store->delete();

        return response()->json([
            'success' => true,
            'message' => 'Tienda eliminada exitosamente'
        ]);
    }

    public function show($id)
    {
        $store = Store::findOrFail($id);

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