<?php

namespace App\Http\Controllers;

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

class AficionadoController extends Controller
{
    public function index()
    {
        $aficionados = Aficionado::all();
        return response()->json($aficionados);
    }

    public function show($id)
    {
        $aficionado = Aficionado::findOrFail($id);
        return response()->json($aficionado);
    }

    public function store(Request $request)
    {
        $data = $request->validate([
            'nombre' => 'required|string|max:100',
            'apellido' => 'required|string|max:100',
            'dni' => 'required|string|max:20|unique:aficionados',
            'fecha_nacimiento' => 'nullable|date',
            'email' => 'nullable|email|max:150',
            'telefono' => 'nullable|string|max:50',
            'localidad' => 'nullable|string|max:100',
            'password' => 'nullable|string',
        ]);
        if (isset($data['password'])) {
            $data['password'] = bcrypt($data['password']);
        }
        $aficionado = Aficionado::create($data);
        return response()->json($aficionado, 201);
    }

    public function update(Request $request, $id)
    {
        $aficionado = Aficionado::findOrFail($id);
        $data = $request->validate([
            'nombre' => 'sometimes|string|max:100',
            'apellido' => 'sometimes|string|max:100',
            'dni' => 'sometimes|string|max:20|unique:aficionados,dni,' . $id . ',id_aficionado',
            'fecha_nacimiento' => 'nullable|date',
            'email' => 'nullable|email|max:150',
            'telefono' => 'nullable|string|max:50',
            'localidad' => 'nullable|string|max:100',
            'password' => 'nullable|string',
        ]);
        if (isset($data['password'])) {
            $data['password'] = bcrypt($data['password']);
        }
        $aficionado->update($data);
        return response()->json($aficionado);
    }

    public function destroy($id)
    {
        $aficionado = Aficionado::findOrFail($id);
        $aficionado->delete();
        return response()->json(null, 204);
    }
}
