<?php

namespace App;

use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;
use App\Traits\ModelTimeFormat;

use App\Traits\ModelLogChanging;

class Authority extends Model
{
    use ModelLogChanging;

    use ModelTimeFormat;
    protected $fillable = ['name','remark','id_parent','alias_name','type','relevance','permission'];
    function roles(){
        return $this->belongsToMany('App\Role','authority_role','id_authority','id_role');
    }
    function getNameFilteredAttribute(){
        preg_match('#(.*)(_[0-9]*?$)#',$this['name'],$arr);
        if($arr){
            $id=str_replace('_','',$arr[2]);
            $owner = Owner::find($id);
            if($owner){return "{$arr[1]}({$owner['name']})";}
        }
        return $this['name'];
    }
    function getOwnerIdAttribute(){
        preg_match('#_([0-9]*?)$#',$this['name'],$arr);
        if(count($arr)>1&&$arr[1]){
            return $arr[1];
        }
        return '';
    }


    public  static  function  filterRecycle(Collection $authorities)
    {
        $owners = Owner::query()->whereNotNull("deleted_at")->get();

        $owner_keys = $owners->map(function($owner){
            return '_'.$owner['id'];
        })->toArray();

        return $authorities->filter(function ($authority)use($owner_keys){
            return !in_array($authority->name,$owner_keys);
        });
    }
}
