<?php

namespace loyalsoft;

/**
 * 事件模块.
 * @version
 *          1.0.0 Created at 2017-8-28.   by --gwang
 * @author gwang (mail@wanggangzero.cn)
 * @copyright ? 2017-8-28, SJZ LoyalSoft Corporation & gwang. All rights reserved.
 */
class EventProc {

    public static function procMain() {
        switch (req()->cmd) {
            case CmdCode::cmd_event_GetNotifications:                           # 7201 拉取角标通知列表
                return self::GetCornerSignNotifications();
            default:
                return Resp::err(ErrCode::cmd_err);
        }
    }

    /**
     * [7201] 拉取角标通知 
     */
    static function GetCornerSignNotifications() {
        // 这里直接返回, 将来开发对应的触发逻辑, 给数组中添加相应的值
        $arr = array_values(array_unique(req()->userInfo->game->privateState->cornerSignNotifications)); # 返回值去重
        req()->userInfo->game->privateState->cornerSignNotifications = [];       # 清理记录
        UserProc::updateUserInfo();
        return Resp::ok(array("notifications" => $arr));                        # 返回
    }

    static function Init() {
        Event::register('onpay', array(new Data_UserProfile(req()->userInfo->game->profile), "OnPay"));
    }

    /**
     * 收到请求
     */
    static function OnRequest() {
        
    }

    /**
     * 处理完毕准备返回
     */
    static function AfterResponse() {
        
    }

    /**
     * 当天第一次登录
     */
    static function OnNewDay() {
        
    }

    /**
     * 当周第一次登录(周一)
     */
    static function OnNewWeek() {
        
    }

    /**
     * 当玩家等级变更
     * @param type $old
     * @param type $new
     */
    static function OnUserLevelup($old, $new) {
        // 处理逻辑,
        $ubs = req()->userInfo->game->privateState->unlockedBuild;
        foreach (GameConfig::build() as $id => $b) {
            isEditor() and $b = new \sm_build();
            if (!in_array($id, $ubs)) {                                         # 尚未解锁的建筑,判断,已解锁的跳过
                if ($b->playerLevelLimit <= $new) {                             # 符合解锁条件
                    req()->userInfo->game->privateState->unlockedBuild[] = $id; # 插入解锁记录
                    NormalEventProc::OnUnlockBuild($id, null);                   # 插入事件
                }
            }
        }

        $map = req()->userInfo->game->map;
        foreach ($map->mainlands as $id => $mlnd) {                             # 检查解锁
            $mlnd = new Ins_Mainland($mlnd);
            foreach ($mlnd->getZoneMos() as $zoneid => $zone) {
                isEditor()and $zone = new \sm_gate_zone();
                if ($zone->playerLevelLimit <= $new) {
                    if (!CommUtil::isPropertyExists($mlnd->normal, $zoneid)) {
                        NormalEventProc::OnUnlockMap($zoneid, 0);
                    } else {
                        // 此区域已经解锁,走顺序关卡模式,除非有其他任务卡或者什么东西直接解锁了某个关卡
                    }
                }
            }
        }

        NormalEventProc::OnUserLvlUp($old, $new);                               # 添加升级事件,算了这个暂时没人关注
    }

}
