<?php
namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Laravel\Scout\Searchable;

/**
 * Class Discrict
 *
 * @package App
 * @property string $name
 * @property string $code
 * @property string $city
 * @property-write mixed $city_id
 * @method static bool|null forceDelete()
 * @method static \Illuminate\Database\Eloquent\Builder|\App\District newModelQuery()
 * @method static \Illuminate\Database\Eloquent\Builder|\App\District newQuery()
 * @method static \Illuminate\Database\Query\Builder|\App\District onlyTrashed()
 * @method static \Illuminate\Database\Eloquent\Builder|\App\District query()
 * @method static bool|null restore()
 * @method static \Illuminate\Database\Query\Builder|\App\District withTrashed()
 * @method static \Illuminate\Database\Query\Builder|\App\District withoutTrashed()
 * @mixin \Eloquent
 */
class District extends Model
{
    protected $table = 'district';

    use Searchable;

    const PAGINATE = 20;
    const HALYTSKYI = 'halytskyi';
    const ZALIZNYCHNYI = 'zaliznychnyi';
    const LYCHAKIV = 'lychakiv';
    const SYKHIV = 'sykhiv';
    const FRANKIVSKYJ = 'frankivskyj';
    const SHEVCHENKIVSKYI = 'shevchenkivskyi';
    const REGION = 'region';
    const LVIV_DISTRICT_ALL = 'lviv_districts';
    const ALL = 'all';

    const CACHE_KEY_MAIN_PAGE_RESULT = "district_main_page_result";
    const CACHE_KEY_MAIN_PAGE_COUNT = "district_main_page_count";

    use SoftDeletes;

    protected $fillable = ['name', 'code', 'city_id'];
    protected $hidden = ['created_at', 'updated_at', 'deleted_at', 'city_id'];

    /**
     * Set to null if empty
     * @param $input
     */
    public function setCityIdAttribute($input)
    {
        $this->attributes['city_id'] = $input ? $input : null;
    }
    
    public function city()
    {
        return $this->belongsTo(City::class, 'city_id')->withTrashed();
    }

    public function getCityDistrictAttribute()
    {
        $cityName = $this->city ? $this->city->name : "N/a";

        return $cityName . ", " . $this->name;
    }

    public function searchableAs()
    {
        return 'district_index';
    }

    public function getScoutKey()
    {
        return $this->id;
    }
}
