<?php
declare (strict_types = 1);

namespace app\admin\controller;

use app\BaseController;
use think\facade\Db;
use think\Request;
use think\App;

class Action extends BaseController
{

    public function __construct(App $app)
    {
        parent::__construct($app);
        $post  =$this->request->post();
        $token = isset($post['token']) ? trim($post['token']) : "";
        if($token==""){
            return error_show(101,'token不能为空');

        }
        $effetc = VerifyTokens($token);
        if(!empty($effetc) && $effetc['code']!=0){
            return error_show($effetc['code'],$effetc['message']);

        }
    }
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function ActionList(){
        $post  =$this->request->post();
        $pageid = isset($post['id']) ? intval($post['id']) : "";
        if($pageid==""){
            return error_show(1001,'页面id不能为空');
        }
        $condition = ['menuid'=>$pageid];
        $data=Db::name('action')->alias("a")->leftJoin("action_list l","a.action_code=l.action_code")->field
        ("a.*,action_name")->where($condition)->select();
        return app_show(0,"获取成功",$data);
    }

    public function ActionSave(){
        $post  =$this->request->post();
        $actionid = isset($post['id']) ? intval($post['id']) : "";
        if($actionid!=""){
            $isf= Db::name("action_list")->where("id","=",$actionid)->find();
            if($isf==false){
                return error_show(1005,"未找到数据");
            }
        }
        $action = isset($post['action_name']) ? trim($post['action_name']) : "";
        if($action==""){
            return error_show(1003,'功能名称不能为空');
        }
        $desc = isset($post['action_desc']) ? trim($post['action_desc']) : "";
        $status = isset($post['status']) ? intval($post['status']) : 0;
        $data=[
            "action_name"=>$action,
            "action_desc"=>$desc,
            "action_code"=>"",
        ];

        $isTrue =  Db::name("action_list")->where(["action_name"=>$action])->find();
        if($isTrue){
            if($isTrue['id']!=$actionid || $actionid==""){
                return error_show(1003,'功能名称不能重复');
            }
        }

        try{
            $message = "";
            if($actionid==""){
                $data['status']=$status;
                $data['is_show']=1;
                $message = "新建成功";
            }else{
                $data['status']=$status;
                $data['id']=$actionid;
                $message = "更新成功";
            }
            Db::name("action_list")->save($data);
            return app_show(0,$message);
        }catch (\Exception $e){
            return  error_show(1005,$e->getMessage());
        }
    }

    public function ActionStatus(){
        $post  =$this->request->post();

        $actid = isset($post['id']) ? intval($post['id']) : "";
        if($actid==""){
            return error_show(1001,'功能id不能为空');
        }
        $status = isset($post['status']) ? intval($post['status']) : 1;
        try{
            $data = ['status'=>$status,"updatetime"=>date("Y-m-d H:i:s")];
            $result=Db::name("action")->where("id","=",$actid)->save($data);
            if($result){
                return app_show(0,"更新成功");
            }else{
                return error_show(1004,"更新失败");
            }
        }catch (\Exception $e){
            return error_show(1003,$e->getMessage());
        }
    }

    /**
     * @return \think\response\Json|void
     * @throws \think\exception\DbException
     */
    public function ActionAdd(){
        $post  =$this->request->post();

        $pageid = isset($post['menuid']) ? intval($post['menuid']) : "";
        if($pageid==""){
            return error_show(1001,'页面id不能为空');
        }
        $code = isset($post['action_code']) ? trim($post['action_code']) : "";

        $status = isset($post['status']) ? intval($post['status']) : 1;
        if($code==""){
            return error_show(1002,'功能code不能为空');
        }
        try{
            $where = ['menuid'=>$pageid,'action_code'=>$code];
            $true =Db::name("action")->where($where)->find();
            $data = ['menuid'=>$pageid,'action_code'=>$code,'status'=>$status,"updatetime"=>date("Y-m-d H:i:s"),"addtime"=>date("Y-m-d H:i:s")];
            if($true){
                return error_show(1003,'此功能已存在');
            }else{
                Db::name("action")->insert($data);
                return app_show(0,"添加成功");
            }
        }catch (\Exception $e){
            return error_show(1005,$e->getMessage());
        }
    }

    /**
     * @return \think\response\Json
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function index(){
        $post  =$this->request->post();
        $data = Db::name("admin_menu")->where(["pid"=>0,"status"=>1,"is_del"=>0])->select();
        $result = [];
        if(empty($data)){
            return app_show(0,"获取成功",$result);
        }
        foreach ($data as $key=>$val){
            $val["child"]=[];
            $result[$val['id']] =$val;
        }

        $child =Db::name("admin_menu")->where([["pid","<>",0],['status',"=",1],["is_del","=",0]])->select();
        foreach ($child as $k=>$value){
            // $act = PasAction::all(['menuid'=>$value['id'],"status"=>1]);
            $act =Db::name("action")->alias("a")->leftJoin("action_list l","a.action_code=l.action_code")->field
            ("a.*,action_name")->where(['a.menuid'=>$value['id'],"a.status"=>1])->select();
            $act_data = Db::name("action_field")->where(['menuid'=>$value['id'],"status"=>1])->select();
            $value['action'] = $act;
            $value['action_data'] = $act_data;
            if(array_key_exists($value['pid'],$result)){
                $result[$value['pid']]["child"][]=$value;
            }
        }

        return app_show(0,"获取成功",array_values($result));
    }

    /**@param id menu 主键id
     * @return \think\response\Json
     * @throws \think\exception\DbException
     */
    public function ActionInfo(){
        $post  =$this->request->post();
        $token = isset($post['token']) ? trim($post['token']) : "";
        if($token==""){
            return error_show(101,'token不能为空');
        }
        $effetc = VerifyTokens($token);
        if(!empty($effetc) && $effetc['code']!=0){
            return error_show($effetc['code'],$effetc['message']);
        }
        $id = isset($post['id'])? intval($post['id']) :"";
        if($id==""){
            return error_show(1002,'功能id不能为空');
        }
        $menu =  Db::name("action_list")->where("id","=",$id)->find();
        if(empty($menu)){
            return error_show(1003,"未找到对应的数据");
        }
        return app_show(0,"获取成功!",$menu);
    }
}