<?php
/**
 *cp管理
 * @file:Cps.php
 * @Created by gnitif
 * @Date: 2023/3/20
 * @Time: 13:57
 */


namespace Modules\ContentManage\Models\Cp;

use Catch\Exceptions\FailedException;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
use Modules\ContentManage\Services\CpManage\CpService;

class Cps extends Model
{
    protected $table = "cps";
    protected $primaryKey = "cp_id";
    protected $fillable = [
        'cp_id', 'cp_nick', 'cp_name', 'cp_company', 'manager', 'phone', 'email', 'share_per', 'settlement_type', 'address', 'is_deleted', 'created_at', 'updated_at', 'deleted_at',
    ];
    protected array $fields = ['cp_id', 'cp_nick', 'cp_name', 'cp_company', 'manager', 'phone', 'email', 'share_per','address', 'created_at', 'updated_at'];
    protected array $form =  ['cp_nick',  'cp_name',  'cp_company',  'manager',  'phone',  'email',  'settlement_type','share_per',   'address'];

    public function storeBy(array $data): mixed
    {
        DB::beginTransaction();
        try {
            if ($this->create($this->filterData($data))){
                #上报
                CpService::reportCpUser(['cp_name' => $data['cp_name']]);
                DB::commit();
                return  $this->getKey();
            }else{
                throw new \Exception("添加失效");
            }

        }catch (\Exception $exception){
            DB::rollBack();
            throw new FailedException('添加失败!请刷新重试');
        }
       return false;
    }

    public function updateBy($id, array $data)
    {

        $updated = $this->where($this->getKeyName(), $id)->update($this->filterData($data));
        return $updated;
    }

    public function deleteBy($id)
    {
        $this->where($this->getKeyName(), $id)->update(['is_deleted' => 1,'deleted_at' => date("Y-m-d H:i:s")]);
    }

    protected function filterData(array $data): array
    {
        // 表单保存的数据集合
        $fillable = array_unique(array_merge($this->getFillable(), property_exists($this, 'form') ? $this->form : []));

        foreach ($data as $k => $val) {
            if (is_null($val) || (is_string($val) && ! $val)) {
                unset($data[$k]);
            }

            if (! empty($fillable) && ! in_array($k, $fillable)) {
                unset($data[$k]);
            }

            if (in_array($k, [$this->getUpdatedAtColumn(), $this->getCreatedAtColumn()])) {
                unset($data[$k]);
            }
        }

        return $data;
    }


}