<?php

////////////////////
// 由CodeGenerator创建。
// Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
// author： gwang
// 日期: 2023-05-26 16:41:03
////////////////////

namespace loyalsoft;

/**
 * 常量配置数据
 */
class GameConfig {
// <editor-fold defaultstate="collapsed" desc="  基础代码 ">

    /**
     * 是否启用codegen
     */
    private static function isCG() {
        return defined('CodeGen_Enabled') && CodeGen_Enabled;
    }

    /**
     * @var bool 分区是否使用独立的常量配置数据
     */
    private static $useZoneId = false;

    /**
     * 追加分区列表字符串
     * @return string
     */
    private static function zoneid() {
        global $zoneid;
        return self::$useZoneId ? "-zone$zoneid" : "";
    }

    /**
     * @return ClientVersion
     */
    private static function CV() {
        return req() ? req()->CV . '-' : "";
    }

    /**
     * 初始化指定变量, 非null的情况下直接跳出
     * 可能从文件中或者redis中获取原始数据对变量进行初始化
     * @param mixed $a 变量
     * @param string $modelName 用来初始化变量的资源名称
     * @param bool $isHash 数据是否采用hash结构(否:普通字符串)
     */
    static private function initValue(&$a, $modelName, $isHash = true) {
        $key = 'gamecfg-' . self::CV() . $modelName . self::zoneid();
        if (is_null($a)) {
            if (self::isCG()) {
                $a = include $key . '.php';
                if ($isHash) {
                    $para = is_array($a) ? $a : (array) $a;                     # 转关联数组
                    foreach ($para as $name => &$value) {
                        $value = JsonUtil::decode($value);                      # 取参数中的或者默认值
                    }
                    $a = arr2obj($para);
                }
            } else {
                $a = $isHash ? gMem()->hgetall($key) : gMem()->get($key);
            }
        }
        return $a;
    }

    /**
     * 获取hash结构的一个item
     * @param string $modelName 模块名称
     * @param mixed/string/int $itemId 索引
     * @return mixed
     */
    private static function get_hash_item($modelName, $itemId) {
        if (self::isCG()) {
            $data = self::$modelName();
            if (property_exists($data, $itemId)) {
                return $data->$itemId;
            }
        } else {
            $key = 'gamecfg-' . self::CV() . $modelName . self::zoneid();
            return gMem()->hget($key, $itemId);
        }
        return null;
    }

// </editor-fold>

// <editor-fold defaultstate="collapsed" desc=" 配置信息 ">     
    
    /**
     * 全局参数
     * @return \globalsettings
     */
    public static function globalsettings() {
        static $a = null;
        return self::initValue($a, 'globalsettings');
    }
    
    /**
     * @return \sm_service_schedule service_schedule item数据
     */
    public static function service_schedule_getItem($itemid) {
        return self::get_hash_item('service_schedule', $itemid);
    }
    
    
    
    
// </editor-fold>
//     
// <editor-fold defaultstate="collapsed" desc="  下面是旧代码 ">    
    
    
    

    /**
     * 系统邮件
     * @return \sysmail
     */
    public static function sysmail() {
        static $a = null;
        return self::initValue($a, 'sysmail');
    }

    /**
     * @return \sm_sysmail sysmail item数据
     */
    public static function sysmail_getItem($itemid) {
        return self::get_hash_item('sysmail', $itemid);
    } 

    /**
     * @return \sm_clientVersionHistory clientVersionHistory item数据
     */
    public static function clientVersionHistory_getItem($itemid) {
        return self::get_hash_item('clientVersionHistory', $itemid);
    }

    /**
     * 分区列表
     * @return \zonelist
     */
    public static function zonelist() {
        static $a = null;
        return self::initValue($a, 'zonelist');
    }

    /**
     * @return \sm_zonelist zonelist item数据
     */
    public static function zonelist_getItem($itemid) {
        return self::get_hash_item('zonelist', $itemid);
    }

    /**
     * 当前版本(时间戳)
     * @return \ver
     */
    public static function ver() {
        static $a = null;
        return self::initValue($a, 'ver', false);
    }
// </editor-fold>
}
