<?php

namespace App\Http\Resources;

use App\Models\GenericBackoffice\WebsiteObject;
use Illuminate\Http\Resources\Json\JsonResource;

class TeamMemberResource extends JsonResource
{
    public function __construct($resource)
    {
        $this->resource = $resource;
    }

    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'id'        => (int)$this->id,
            'name'      => $this->title,
            'slug'      => '/' . $this->lang_slug,
            'link'      => $this->_getBlockLinkWithStyleInfo($this->link_info),
            'image'     => $this->_getImage($this->memberImage),
            'role'      => $this->role,
            'question'  => $this->question,
            'answer'    => $this->answer,
        ];
    }

    private function _getLink(?array $blockLink)
    {
        if ($blockLink) {
            if (array_key_exists('objectId', $blockLink)) {
                $websiteObject = WebsiteObject::find($blockLink['objectId']);
                if ($websiteObject) {
                    $blockLink['url'] = $websiteObject->uri;
                }
            }
        }
        return $blockLink;
    }

    private function _getBlockLinkWithStyleInfo($blockLink)
    {
        if (!is_array($blockLink)) {
            $blockLink = json_decode($blockLink, true);
        }
        $blockLink = $this->_getLink($blockLink);
        if ($blockLink && $blockLink['url']) {
            $blockLink['style'] = [];
            $blockLink['style']['type'] = $this->link_effect;
            $blockLink['style']['iconSize'] = $this->link_icon_size;
            $blockLink['style']['isIconFirst'] = $this->link_icon_side == 'left';
            $blockLink['style']['textSize'] = $this->link_text_size;
        } else {
            $blockLink = null;
        }
        return $blockLink;
    }

    private function _getImage($imageItem = NULL, $imageSize = '')
    {
        if ($imageItem) {
            return getImage($imageItem, $imageSize);
        } else {
            return (object)[
                'src' => null,
                'alt' => null,
            ];
        }
    }
}
