<?php
/**
 * 打印设置控制器
 *
 * @author qifan
 * @date 2020-12-03
 */

namespace app\admin\controller;

use app\admin\logic\PrintingLogic;
use think\Hook;
use think\Request;

class Printing extends ApiCommon
{
    /**
     * 用于判断权限
     * @permission 无限制
     * @allow 登录用户可访问
     * @other 其他根据系统设置
     **/
    public function _initialize()
    {
        $action = [
            'permission'=>[''],
            'allow'=>['index', 'create', 'update', 'read', 'delete', 'field', 'copy']
        ];
        Hook::listen('check_auth',$action);
        $request = Request::instance();
        $a = strtolower($request->action());
        if (!in_array($a, $action['permission'])) {
            parent::_initialize();
        }
    }

    /**
     * 打印模板列表
     *
     * @param PrintingLogic $printingLogic
     * @return \think\response\Json
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function index(PrintingLogic $printingLogic)
    {
        $data = $printingLogic->index($this->param);

        return resultArray(['data' => $data]);
    }

    /**
     * 创建打印模板
     *
     * @param PrintingLogic $printingLogic
     * @return \think\response\Json
     */
    public function create(PrintingLogic $printingLogic)
    {
        $param = $this->param;

        if (empty($param['name']))    return resultArray(['error' => '缺少模板名称!']);
        if (empty($param['type']))    return resultArray(['error' => '缺少模板类型!']);

        if (!$printingLogic->create($param)) return resultArray(['error' => '添加失败!']);


        return resultArray(['data' => '添加成功!']);
    }

    /**
     * 获取模板详情
     *
     * @param PrintingLogic $printingLogic
     * @return \think\response\Json
     */
    public function read(PrintingLogic $printingLogic)
    {
        $id = $this->param['id'];

        if (empty($id)) return resultArray('缺少模板ID!');

        $data = $printingLogic->read($id);

        return resultArray(['data' => $data]);
    }

    /**
     * 更新模板数据
     *
     * @param PrintingLogic $printingLogic
     * @return \think\response\Json
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     */
    public function update(PrintingLogic $printingLogic)
    {
        $param = $this->param;

        if (empty($param['id'])) return resultArray(['error' => '缺少模板ID!']);
        if (isset($param['name']) && empty($param['name'])) return resultArray(['error' => '名称不能为空!']);

        if ($printingLogic->update($param) === false) return resultArray(['error' => '更新失败!']);

        return resultArray(['data' => '更新成功!']);
    }

    /**
     * 删除模板数据
     *
     * @param PrintingLogic $printingLogic
     * @return \think\response\Json
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     */
    public function delete(PrintingLogic $printingLogic)
    {
        $id = $this->param['id'];

        if (empty($id)) return resultArray(['error' => '缺少模板ID!']);

        if (!$printingLogic->delete($id)) return resultArray(['error' => '删除失败!']);

        return resultArray(['data' => '删除成功!']);
    }

    /**
     * 复制模板数据
     *
     * @param PrintingLogic $printingLogic
     * @return \think\response\Json
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function copy(PrintingLogic $printingLogic)
    {
        $id = $this->param['id'];

        if (empty($id)) return resultArray(['error' => '缺少模板ID!']);

        if (!$printingLogic->copy($id)) return resultArray(['error' => '复制失败!']);

        return resultArray(['data' => '复制成功!']);
    }

    /**
     * 获取打印字段
     *
     * @param PrintingLogic $printingLogic
     * @return \think\response\Json
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function field(PrintingLogic $printingLogic)
    {
        # 打印类型:5商机;6合同;7回款
        $type = !empty($this->param['type']) ? $this->param['type'] : 5;

        $data = $printingLogic->getFields($type);

        return resultArray(['data' => $data]);
    }
}