<?php

namespace App\Model;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;

class SelfClassifyModel extends Model
{
    protected $connection = false;
    protected $table = 'self_classify';
    public $timestamps = false;

    //生成自营分类redis
    public function ProduceClassRedis($class_id = '', $Redis = '')
    {
        if (empty($class_id)) {
            return false;
        }
        if (empty($Redis)) {
            $Redis = new RedisModel();
        }
        $info = json_decode($Redis->hget('Self_SelfClassInfo', $class_id), true);
        if (!$info) {
            if (empty($this->connection)) {
                $this->connection = 'self';
            }
            $info = $this->where('class_id', '=', $class_id)->select('class_id', 'class_name', 'parent_id', 'sort',
                'status', 'class_icon', 'ladder', 'is_dc')->first();
            if ($info) {
                $info = $info->toArray();
                if (!empty($info['ladder'])) {
                    $info['ladder'] = json_decode($info['ladder'], true);
                }
                $Redis->hset('Self_SelfClassInfo', $class_id, json_encode($info));
            } else {
                return false;
            }
        }

        return $info;
    }

    //二级分类关联模型
    public function sub_class()
    {
        return $this->hasMany(SelfClassifyModel::class, 'parent_id', 'class_id');
    }

    //获取一二级分类(有关联关系)
    public function getClassList()
    {
        $classificationsExpireMinute = 5;
        //先去缓存里面取
        $Redis = new RedisModel;
        $classList = $Redis->hgetall('Self_SelfClassInfo');
        $classList = array_map(function ($value) {
            return json_decode($value, true);
        }, $classList);

        if (!$classList) {
            return Cache::remember('classList', $classificationsExpireMinute, function () {
                $field = [
                    'class_id',
                    'class_name',
                    'status',
                    'class_icon',
                ];

                return $this->select($field)->with([
                    'sub_class' => function ($query) use ($field) {
                        array_push($field, 'parent_id');
                        $query->select($field);
                    },
                ])->where('status', 1)->where('parent_id', 0)
                    ->orderBy('sort', 'desc')->get()->toArray();
            });
        }

    }
}