<?php
/**
 * VR票务插件 - 核销员管理
 *
 * @package vr_ticket\admin\controller
 */

namespace app\plugins\vr_ticket\admin\controller;

class Verifier extends Base
{
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * 核销员列表
     */
    public function list()
    {
        $where = [];

        $keywords = input('keywords', '', null, 'trim');
        if (!empty($keywords)) {
            $where[] = ['name|user_id', 'like', "%{$keywords}%"];
        }

        $status = input('status', '', null);
        if ($status !== '' && $status !== null) {
            $where[] = ['status', '=', intval($status)];
        }

        $list = \Db::name('plugins_vr_verifiers')
            ->where($where)
            ->order('id', 'desc')
            ->paginate(20)
            ->toArray();

        // 关联 ShopXO 用户信息
        $user_ids = array_filter(array_column($list['data'], 'user_id'));
        if (!empty($user_ids)) {
            // ThinkPHP column() 不支持直接传 CONCAT SQL，改用 select() + PHP 拼接
            $users_raw = \Db::name('User')
                ->where('id', 'in', $user_ids)
                ->select();
            $users = [];
            foreach ($users_raw as $u) {
                $users[$u['id']] = ($u['nickname'] ?: '') . '/' . ($u['username'] ?: '');
            }
            foreach ($list['data'] as &$item) {
                $item['user_name'] = $users[$item['user_id']] ?? '已删除用户';
            }
            unset($item);
        }

        return view('', [
            'list'  => $list['data'],
            'page'  => $list['page'],
            'count' => $list['total'],
        ]);
    }

    /**
     * 添加/编辑核销员
     */
    public function save()
    {
        $id = input('id', 0, 'intval');

        if (IS_AJAX_POST) {
            $user_id = input('user_id', 0, 'intval');
            $name = input('name', '', null, 'trim');
            $status = input('status', 1, 'intval');

            if ($user_id <= 0) {
                return DataReturn('请选择关联用户', -1);
            }
            if (empty($name)) {
                return DataReturn('核销员名称不能为空', -1);
            }

            // 检查是否已存在
            $exist = \Db::name('plugins_vr_verifiers')
                ->where('user_id', $user_id)
                ->where('id', '<>', $id)
                ->find();
            if ($exist) {
                return DataReturn('该用户已是核销员', -1);
            }

            if ($id > 0) {
                \Db::name('plugins_vr_verifiers')
                    ->where('id', $id)
                    ->update([
                        'name'      => $name,
                        'status'    => $status,
                    ]);
                return DataReturn('更新成功', 0);
            } else {
                \Db::name('plugins_vr_verifiers')->insert([
                    'user_id'    => $user_id,
                    'name'       => $name,
                    'status'     => $status,
                    'created_at' => time(),
                ]);
                return DataReturn('添加成功', 0);
            }
        }

        $info = [];
        if ($id > 0) {
            $info = \Db::name('plugins_vr_verifiers')->find($id);
        }

        // 用户列表（用于选择）
        $users = \Db::name('User')
            ->where('is_delete', 0)
            ->field('id, nickname, username')
            ->order('id', 'desc')
            ->select();

        return view('', [
            'info'  => $info,
            'users' => $users,
        ]);
    }

    /**
     * 删除核销员
     */
    public function delete()
    {
        if (!IS_AJAX_POST) {
            return DataReturn('非法请求', -1);
        }

        $id = input('id', 0, 'intval');
        if ($id <= 0) {
            return DataReturn('参数错误', -1);
        }

        // 不允许删除，改为禁用
        $verifier = \Db::name('plugins_vr_verifiers')->where('id', $id)->find();
        \Db::name('plugins_vr_verifiers')
            ->where('id', $id)
            ->update(['status' => 0]);

        // 审计日志
        \app\plugins\vr_ticket\service\AuditService::log(
            \app\plugins\vr_ticket\service\AuditService::ACTION_DISABLE_VERIFIER,
            \app\plugins\vr_ticket\service\AuditService::TARGET_VERIFIER,
            $id,
            ['before_status' => $verifier['status'] ?? 1],
            $verifier ? "核销员: {$verifier['name']}" : "ID:{$id}"
        );

        return DataReturn('已禁用', 0);
    }
}
