<?php

declare(strict_types=1);

namespace app\controller\api;

use app\BaseController;
use app\model\PayAccount;
use app\model\PayChannel;
use app\model\Platform;
use app\model\User;
use think\facade\View;

class PayManageController extends BaseController
{
    // 获取账号列表
    public function getPayAccount()
    {
        $query = $this->request->get();
        $accounts = PayAccount::serchAccount($query)->order('id', 'desc')->paginate(['list_rows' => $query['limit'], 'page' => $query['page']]);
        if ($accounts) {
            return json(['code' => 0, 'msg' => 'OK', 'count' => $accounts->total(), 'data' => $accounts->items()]);
        } else {
            return json(['code' => 1, 'msg' => '无数据记录', 'count' => 0, 'data' => []]);
        }
    }
    // 编辑账号
    public function editAccount()
    {
        $info = $this->request->post();
        $up_res = PayAccount::update($info);
        if ($up_res) {
            $acc = PayAccount::find($info['id']);
            $this->createAccountConfig($acc);
            return json(\backMsg(0, '修改成功'));
        } else {
            return json(\backMsg(1, '修改失败'));
        }
    }
    // 账号状态
    public function accountEnable()
    {
        $info = $this->request->post();
        $up_res = PayAccount::update($info);
        if ($up_res) {
            return json(\backMsg(0, '成功'));
        } else {
            return json(\backMsg(1, '失败'));
        }
    }
    // 删除账号
    public function delAccount()
    {
        $ids = $this->request->post('ids');
        $res = PayAccount::destroy($ids);
        if ($res) {
            return \json(\backMsg(0, '已删除'));
        } else {
            return \json(\backMsg(1, '失败'));
        }
    }
    // 添加账号
    public function addAccount()
    {
        $info = $this->request->post();
        $pid = $this->request->session('pid');
        $info['pid'] = $pid;
        $check_acc = PayAccount::where(['account' => $info['account'], 'pid' => $pid])->find();
        if ($check_acc) {
            return \json(\backMsg(1, '账号已存在'));
        }
        $acc = PayAccount::create($info);
        if ($acc) {
            $this->createAccountConfig($acc);
            return \json(\backMsg(0, '添加成功'));
        } else {
            return \json(\backMsg(1, '添加失败'));
        }
    }
    // 添加收款终端
    public function addChannel()
    {
        $info = $this->request->post();
        $res = PayChannel::create($info);
        if ($res) {
            return \json(\backMsg(0, '添加成功'));
        } else {
            return \json(\backMsg(1, '添加失败'));
        }
    }
    // 编辑收款终端
    public function editChannel()
    {
        $info = $this->request->post();
        $up_res = PayChannel::update($info);
        if ($up_res) {
            return json(\backMsg(0, '修改成功'));
        } else {
            return json(\backMsg(1, '修改失败'));
        }
    }
    // 收款终端列表
    public function getChannelList()
    {
        $aid = $this->request->post('aid');
        $res = PayChannel::where(['account_id' => $aid])->order('last_time', 'desc')->select();
        if ($res) {
            return \json(\backMsg(0, '获取成功', $res));
        } else {
            return \json(\backMsg(1, '失败'));
        }
    }
    // 生成账号配置
    private function createAccountConfig($acc)
    {
        $platform = Platform::where('platform', $acc->getData('platform'))->find();
        $user = User::where('pid', $acc->pid)->find();
        $query = \unserialize($platform->query);
        $data = [
            'pid'       =>  $user->pid,
            'key'       =>  $user->secret_key,
            'aid'       =>  $acc->id,
            'platform'  =>  $acc->getData('platform'),
            'account'   =>  $acc->account,
            'password'  =>  $acc->password,
            'payclass'  =>  $platform->class_name,
            'query'     =>  \var_export($query, \true)
        ];
        $config = View::fetch('tpl/account_config', $data);
        $name = "{$data['pid']}_{$data['aid']}";
        $path = "../config/payconfig/{$name}.php";
        \file_put_contents($path, $config);
    }
}
