<?php namespace Api\Lib;
use Dever;
# 官方平台账户
class Account
{
    public function update($db, $data)
    {
        if (isset($data['app_platform']) && $data['app_platform']) {
            $app_platform = $data['app_platform'];
            if (is_string($app_platform)) {
                $app_platform = explode(',', $app_platform);
            }
            $data['app_id'] = $app_platform[0];
            $data['platform_id'] = $app_platform[1] ?? 0;
            if (!$data['platform_id']) {
                Dever::error('请选择平台');
            }
        }
        return $data;
    }

    public function run($account, $func, $param = array(), $env = 1, $method = 'run', $project = 'api')
    {
        if (!is_array($account)) {
            $account = Dever::db('account', 'api')->find(array('key' => $account));
        }
        if (!$account) {
            Dever::error('账户无效');
        }
        if (!is_array($func)) {
            $func = Dever::db('app_func', 'api')->find(array('app_id' => $account['app_id'], 'key' => $func));
        }
        if (!$func) {
            Dever::error('功能无效');
        }
        $api = Dever::load('app', 'api')->getApi($func['id'], $env);
        if (!$api) {
            Dever::error('接口无效');
        }
        $param['account_project'] = $project;
        $param['account_id'] = $account['id'];
        $result = array();
        if ($func['type'] == 1) {
            # 仅执行第一个
            $result = Dever::load('api', 'api')->$method($api[0], $param);
            if (is_array($result)) {
                $result['account_id'] = $account['id'];
                $result['api_id'] = $api[0]['id'];
            }
        } elseif ($func['type'] == 2) {
            # 同步执行
            foreach ($api as $k => $v) {
                $result = Dever::load('api', 'api')->$method($v, $param);
                if ($result && is_array($result)) {
                    $param = array_merge($result, $param);
                }
            }
        } elseif ($func['type'] == 3) {
            # 异步执行
            $result = true;
            foreach ($api as $k => $v) {
                $param['api_id'] = $v['id'];
                \Dever\Helper\Cmd::run('task.api', $param, 'api');
            }
        }
        return $result;
    }
}