<?php
// +----------------------------------------------------------------------
// | onezan-admin 快速开发的管理平台
// +----------------------------------------------------------------------
// | 官方网址：https://www.onezan.cn
// +----------------------------------------------------------------------
// | onezan团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: 543885307@qq.com
// +----------------------------------------------------------------------
namespace app\model;

use think\Model;


/**
 * 模块清单模型
 * 记录各模块/插件的注册信息、文件列表、数据表、路由、权限
 * @package app\model
 */
class ModuleManifest extends Model
{
    protected $name = 'sys_module_manifests';

    protected $autoWriteTimestamp = true;

    protected $type = [
        'status'       => 'integer',
        'is_removable' => 'integer',
        'sort'         => 'integer',
        'installed_at' => 'integer',
    ];

    protected $json = ['files', 'tables', 'routes', 'permissions', 'dependencies'];

    protected $jsonAssoc = true;


    /**
     * 设置文件列表（修改器）
     * @param mixed $value
     * @return string JSON字符串
     */
    public function setFilesAttr($value): string
    {
        return is_array($value) ? json_encode($value, JSON_UNESCAPED_UNICODE) : (string)$value;
    }


    /**
     * 设置数据表列表（修改器）
     * @param mixed $value
     * @return string JSON字符串
     */
    public function setTablesAttr($value): string
    {
        return is_array($value) ? json_encode($value, JSON_UNESCAPED_UNICODE) : (string)$value;
    }


    /**
     * 设置路由列表（修改器）
     * @param mixed $value
     * @return string JSON字符串
     */
    public function setRoutesAttr($value): string
    {
        return is_array($value) ? json_encode($value, JSON_UNESCAPED_UNICODE) : (string)$value;
    }


    /**
     * 设置权限列表（修改器）
     * @param mixed $value
     * @return string JSON字符串
     */
    public function setPermissionsAttr($value): string
    {
        return is_array($value) ? json_encode($value, JSON_UNESCAPED_UNICODE) : (string)$value;
    }


    /**
     * 设置依赖列表（修改器）
     * @param mixed $value
     * @return string JSON字符串
     */
    public function setDependenciesAttr($value): string
    {
        return is_array($value) ? json_encode($value, JSON_UNESCAPED_UNICODE) : (string)$value;
    }


    /**
     * 获取文件列表（获取器）
     * @param mixed $value
     * @return array
     */
    public function getFilesAttr($value): array
    {
        if (is_array($value)) {
            return $value;
        }
        $decoded = json_decode($value ?: '[]', true);
        return is_array($decoded) ? $decoded : [];
    }


    /**
     * 获取数据表列表（获取器）
     * @param mixed $value
     * @return array
     */
    public function getTablesAttr($value): array
    {
        if (is_array($value)) {
            return $value;
        }
        $decoded = json_decode($value ?: '[]', true);
        return is_array($decoded) ? $decoded : [];
    }


    /**
     * 获取路由列表（获取器）
     * @param mixed $value
     * @return array
     */
    public function getRoutesAttr($value): array
    {
        if (is_array($value)) {
            return $value;
        }
        $decoded = json_decode($value ?: '[]', true);
        return is_array($decoded) ? $decoded : [];
    }


    /**
     * 获取权限列表（获取器）
     * @param mixed $value
     * @return array
     */
    public function getPermissionsAttr($value): array
    {
        if (is_array($value)) {
            return $value;
        }
        $decoded = json_decode($value ?: '[]', true);
        return is_array($decoded) ? $decoded : [];
    }


    /**
     * 获取依赖列表（获取器）
     * @param mixed $value
     * @return array
     */
    public function getDependenciesAttr($value): array
    {
        if (is_array($value)) {
            return $value;
        }
        $decoded = json_decode($value ?: '[]', true);
        return is_array($decoded) ? $decoded : [];
    }
}
