<?php

namespace App\Http\Controllers\Frontend;

use App\Exceptions\ApiHttpException;
use App\Facades\ResultsService;
use App\Http\Controllers\Controller;
use App\Http\Requests\ResultListRequest;
use App\Http\Resources\Results\ResultDetailResource;
use App\Http\Resources\Results\ResultResourceCollection;
use App\Http\Resources\Results\TrackedResultDetailResource;
use Illuminate\Support\Facades\Auth;

class ResultsController extends Controller
{
    public function index(ResultListRequest $request)
    {
        $user = Auth::user();
        $data = $request->validated();

        $results = ResultsService::getResults($data, $user);

        return new ResultResourceCollection($results, ResultsService::getFiltersCount($data));
    }

    public function show(string $slug)
    {
        $user = Auth::user();

        $result = ResultsService::getResultBySlug($slug, $user);

        if (!$result) {
            throw new ApiHttpException(404, 'item_not_found');
        }

        return new ResultDetailResource($result);
    }

    public function getTrackedResult(string $slug)
    {
        $user = Auth::user();

        $trackedResult = ResultsService::getTrackedResultBySlug($slug, $user);

        if (!$trackedResult) {
            throw new ApiHttpException(404, 'item_not_found');
        }

        return new TrackedResultDetailResource($trackedResult);
    }

    public function getFiltersCount(ResultListRequest $request)
    {
        $data = $request->validated();

        $counts = ResultsService::getFiltersCount($data);

        return response()->json($counts);
    }
}
