<?php

namespace app\project\controller;

use controller\BasicApi;
use service\DataService;
use service\NodeService;
use service\ToolsService;
use think\Db;
use think\facade\Request;

/**
 * 系统功能节点管理
 * Class Node
 * @package app\admin\controller
 * @author Vilson
 */
class Node extends BasicApi
{

    /**
     * 指定当前默认模型
     * @var string
     */
    public $table = 'ProjectNode';

    /**
     * 显示节点列表
     * @return string
     */
    public function index()
    {
        $module = 'project';
        !$module && $module = '';

        $nodes = ToolsService::arr2table(NodeService::get([], [], $module), 'node', 'pnode');
        $groups = [];
        foreach ($nodes as $node) {
            $pnode = explode('/', $node['node'])[0];
            if ($node['node'] === $pnode) {
                $groups[$pnode]['node'] = $node;
            }
            $groups[$pnode]['list'][] = $node;
        }
        $this->success('', ['nodes' => $nodes, 'groups' => $groups]);
    }

    public function allList()
    {
//        $module = Request::post('module');
        $node = Request::post('node');
        $where = [];
//        if ($module) {
//            $where[] = ['module', '=', $module];
//        }
        if ($node) {
            $where[] = ['node', 'like', "%{$node}%"];
        }
        $list = Db::name('ProjectNode')->where($where)->select();
        if ($node == '#') {
            $list[] = ['node' => '#', 'title' => '无节点权限'];
        }
        $this->success('', $list);
    }

    /**
     * 清理无效的节点记录
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     */
    public function clear()
    {
        $nodes = array_keys(NodeService::get());
        if (false !== Db::name('projectNode')->whereNotIn('node', $nodes)->delete()) {
            $this->success('清理无效节点记录成功!', '');
        }
        $this->error('清理无效记录失败,请稍候再试!');
    }

    /**
     * 保存节点变更
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     */
    public function save()
    {
        if ($this->request->isPost()) {
            list($post, $data) = [json_decode($this->request->post('list')), []];
            foreach ($post as $vo) {
                if (!empty($vo->node)) {
                    $data['node'] = $vo->node;
                    if ($vo->name) {
                        foreach ($vo->name as $key => $name) {
                            $data[$name->name] = $vo->value[$key]->value;
                        }
                    }
                }
                //根据模块将权限节点插入对应的表
                if (strpos('/', $data['node']) !== -1) {
                    $module = explode('/', $data['node'])[0];
                } else {
                    $module = $data['node'];
                }
                $data['module'] = $module;
                switch ($module) {
                    case 'project':
                        $table = 'ProjectNode';
                        break;
                    default:
//                        $table = $this->table;
                }
                !empty($data) && isset($table) && DataService::save($table, $data, 'node');
//                !empty($data) && DataService::save($this->table, $data, 'node');

            }
            $this->success('参数保存成功!', '');
        }
        $this->error('访问异常,请重新进入...');
    }

}