<?php

namespace Yajny\Models;

use Illuminate\Database\Eloquent\Model;
use Spatie\Translatable\HasTranslations;
use Yajny\Traits\SelectTranslations;

class Slider extends Model
{
    use HasTranslations, SelectTranslations;

    protected $table = 'sliders';
    protected $primaryKey = 'id';
    public $translatable = ['title', 'promo_text', 'link', 'app_link'];

    public $timestamps = false;

    public  $selColmns = ['id','store_id','title','promo_text','link_type','mob_image_en','mob_image_ar','code','app_link'];

    public function store()
    {
        return $this->belongsTo('Yajny\Models\Store',  'store_id', 'id')->withoutGlobalScopes();
    }

    public static function getByPage($pageFileName, $regionCode = null, $selColumns = true)
    {
        $sliders = null;
        $page = Page::where('filename', $pageFileName)->where('status', 'publish')->first();
        if ($page) {
            $slidersQuery = Slider::with(['store' => function ($q) {
                $q->selectRaw(Store::colSelect());
            }]);

            if ($selColumns)
                $slidersQuery->selectRaw(Slider::colSelect());

            $slidersQuery->where('page_id', $page->pageID)
                ->where('is_shown', 1)
                ->orderBy('sort_order');
            $regionCode = $regionCode ?? request('region');
            if ($regionCode) {
                $slidersQuery->whereJsonContains('region_code', $regionCode);
            } else {
                $slidersQuery->where('show_in_global', 1);
            }
            $sliders = $slidersQuery->get();
        }
        return $sliders;
    }

    public static function mapItems($item)
    {
        return [
            'id' => $item->id,
            'title' => $item->getTranslations('title') ?: [
                'en' => $item->title_en,
                'ar' => $item->title_ar,
            ],
            'promo_text' => $item->getTranslations('promo_text') ?: [
                'en' => $item->promo_text_en,
                'ar' => $item->promo_text_ar,
            ],
            'link_type' => $item->link_type,
            'app_link' => $item->getTranslation('app_link', app()->getLocale()) ?: $item->app_link_lang,
            'app_link_lang' => $item->getTranslations('app_link') ?: [
                'en' => $item->app_link_en,
                'ar' => $item->app_link_ar,
            ],
            'code' => $item->code,
            'mob_image' => [
                'en' => $item->mob_image_en,
                'ar' => $item->mob_image_ar
            ],
            'mob_image_en' => $item->mob_image_en,
            'mob_image_ar' => $item->mob_image_ar,
            'store' => Store::mapItems($item->store)
        ];
    }
}
