<?php

namespace App\Http\Resources\Admin;

use App\Models\{ Admin };
use App\Services\Image\ImageService;
use App\Services\PersonaService;
use Illuminate\Http\Resources\Json\JsonResource;

/**
 * @phpstan-import-type ThumbSize from App\Services\Image\ImageService
 *
 * @property Admin $resource
 */
class AdminResource extends JsonResource
{
    protected PersonaService $personaService;

    public function __construct(Admin $admin)
    {
        $this->personaService = new PersonaService(new ImageService);

        parent::__construct($admin);
    }

    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
     */
    public function toArray($request)
    {
        $persona = $this->resource->persona;
        $attributes = $this->resource->toArray();
        $attributes['persona']['imageUrl'] = $this->personaService
            ->setPersona($persona)
            ->getImageUrl($persona->getImageThumbSize());

        unset($attributes['id']);

        return [
            'type' => 'admins',
            'id' => (string) $this->resource->getRouteKey(),
            'attributes' => $attributes,
            'links' => [
                'self' => asset(route('api.v1.admin.show', $this->resource->getRouteKey()))
            ]
        ];
    }

    public function toResponse($request)
    {
        return parent::toResponse($request)->withHeaders([
            'Location' => route('api.v1.admin.show', $this->resource)
        ]);
    }
}
