<?php

namespace App\Http\Resources\Watchlists;

use App\Http\Resources\Competitions\CompetitionResource;
use App\Http\Resources\JobOffers\JobOfferResource;
use App\Http\Resources\Profiles\ProfilesResource;
use App\Http\Resources\Results\ResultResource;
use App\Http\Resources\Results\TrackedResultResource;
use App\Models\CompanyProfile;
use App\Models\Competition;
use App\Models\JobOffer;
use App\Models\Result;
use App\Models\TrackedResult;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\ResourceCollection;

class WatchlistResourceCollection extends ResourceCollection
{
    private Array | null $counters;

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct($data, Array $counters = null)
    {
        parent::__construct($data);
        $this->counters = $counters;
    }

    /**
     * Transform the resource collection into an array.
     *
     * @return array<int|string, mixed>
     */
    public function toArray(Request $request): array
    {
        $first = $this->collection->first();

        $data = match (true) {
            $first instanceof Competition => CompetitionResource::collection($this->collection),
            $first instanceof Result => ResultResource::collection($this->collection),
            $first instanceof TrackedResult => TrackedResultResource::collection($this->collection),
            $first instanceof CompanyProfile => ProfilesResource::collection($this->collection),
            $first instanceof JobOffer => JobOfferResource::collection($this->collection),
            default => [],
        };

        return [
            'data' => $data,
            'counters' => $this->counters,
        ];
    }

    protected function collects()
    {
        return null;
    }
}
