<?php

namespace App\Http\Controllers\Api\Auth;

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

class SavedSearchController extends Controller
{
    /** Kullanıcı başına kayıt üst sınırı. */
    private const MAX_PER_USER = 30;

    public function index(Request $request)
    {
        $searches = SavedSearch::query()
            ->where('user_id', $request->user()->id)
            ->latest()
            ->limit(self::MAX_PER_USER)
            ->get();

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

    public function store(Request $request)
    {
        $data = $request->validate([
            'name' => ['required', 'string', 'max:60'],
            'query' => ['required', 'array'],
        ]);

        $existing = SavedSearch::query()
            ->where('user_id', $request->user()->id)
            ->get();

        // Aynı filtre seti zaten kayıtlıysa kopya açma; adı tazele ve mevcut kaydı döndür.
        $duplicate = $existing->first(fn (SavedSearch $search) => $search->query == $data['query']);
        if ($duplicate) {
            $duplicate->update(['name' => $data['name']]);

            return response()->json(['data' => $duplicate], 200);
        }

        if ($existing->count() >= self::MAX_PER_USER) {
            return response()->json([
                'message' => 'En fazla ' . self::MAX_PER_USER . ' arama kaydedebilirsiniz. Önce eskilerden birini silin.',
            ], 422);
        }

        $search = SavedSearch::create([
            'user_id' => $request->user()->id,
            'name' => $data['name'],
            'query' => $data['query'],
        ]);

        return response()->json(['data' => $search], 201);
    }

    public function destroy(Request $request, SavedSearch $savedSearch)
    {
        abort_unless($savedSearch->user_id === $request->user()->id, 403, 'Bu kayıt üzerinde yetkiniz yok');

        $savedSearch->delete();

        return response()->json(['message' => 'Kayıtlı arama silindi.']);
    }
}
