<?php

namespace App\Models;

use App\Models\traits\SetConnection;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Auth;
use Illuminate\Database\Eloquent\Model;

class RelationPortalFacility extends Model
{
    use SetConnection;

    protected $fillable = [
        'article_id', 'facility_id', 'distance', 'facility_property', 'facility_area', 'facility_name', 'facility_memo', 'facility', 'portal_id', 'del', 'article_facility_id', 'file_path', 'company_id', 'order', 'type', 'type_upload', 'created_at'
    ];

    const CREATED_AT = null;
    const UPDATED_AT = null;

    //

    public static function getImgByArticleId($id, $type = null, $del = 0)
    {
        $res = RelationPortalFacility::where('article_id', '=', $id)->where("company_id", auth()->user()->company_id);
        if(!is_null($type)){
            $res = $res->where('type', $type);
        }
        $res = $res->where('del', $del);
        $res = $res->orderBy('order')->get();

        return $res;
    }

    public static function getData($id)
    {
        $user = Auth::user();
        $res = RelationArticleFacility::select(['relation_article_facilities.*'])
            ->leftjoin("facilities", "facilities.id", "=", "relation_article_facilities.facility_id")
            ->where('article_id', '=', $id)
            ->where('facilities.company_id', $user->company_id)
            ->orderby('facility_property')
            ->orderby('distance')
            ->get();
        return $res;
    }

    public static function getArticleRelation($article_id, $facility_id) {

        $res = RelationArticleFacility::where('article_id', '=', $article_id)->where('facility_id', '=', $facility_id)->first();
        return $res;
    }

    public static function getFacilityDataByRainsNo($code='')
    {
        $user = Auth::user();
        $res = RelationArticleFacility::select(['relation_article_facilities.*', 'facilities.name', 'facilities.kind', 'facilities.file_path'])
        ->leftjoin("facilities", "facilities.id", "=", "relation_article_facilities.facility_id")
        ->where('relation_article_facilities.article_id', '=', $code)->where('facilities.company_id', $user->company_id)->get();
        return $res;
    }
    public static function getFacilityDataByRainsNoSort($code='')
    {
        $user = Auth::user();
        $res = RelationArticleFacility::select(['relation_article_facilities.*', 'facilities.name', 'facilities.kind', 'facilities.file_path'])
        ->leftjoin("facilities", "facilities.id", "=", "relation_article_facilities.facility_id")
            ->where('relation_article_facilities.article_id', '=', $code)->where('facilities.company_id', $user->company_id)
        ->orderBy('id', 'DESC')->get();
        return $res;
    }

    public function parent()
    {
        return $this->belongsTo(Facility::class, "facility_id");
    }

    public function getStorageLinkAttribute()
    {
        return str_replace('public', '/storage', $this->attributes["file_path"]);
    }

    public function scopeType(Builder $builder, $type) {
        return $builder->where('type', $type);
    }

    public function scopeDel(Builder $builder, $del) {
        return $builder->where('del', $del);
    }

    public function setCreatedAtAttribute($value)
    {
        $this->attributes['created_at'] = !empty($value) ? $value : Carbon::now();
    }
}
