<?php

namespace app\event;

use app\model\ThirdUser;
use app\service\GoogleAdsAssetService;
use app\service\GoogleOAuthService;
use app\service\GoogleAdsAccountService;
use Google\ApiCore\ApiException;
use support\Response;
use support\Log;
use DI\Annotation\Inject;


//use QL\QueryList;


class GoogleAdsCustomers
{
    /**
     * @Inject
     * @var GoogleOAuthService
     */

    private $googleOAuthService;


    /**
     * @Inject
     * @var GoogleAdsAccountService
     */

    private $googleAdsAccountService;

    const event = 'googleads:customers:event';
    const add_queue = 'googleads:customers:add:queue';
    const init_queue = 'googleads:customers:init:queue';

    public function addCustomers()
    {
//        dump($options);
        $thirdUser = ThirdUser::where('is_default', 'f')->where('third_type', 'google')
            ->find();
        if (!$thirdUser || !$thirdUser->access_token) {
            dump('not found third user');
            return;
        }
        $option                  = [];
        $option['refresh_token'] = $thirdUser->access_token;
//        dump($option);
//        $listAccessibleCustomers = $this->googleAdsAccountService->runListAccessibleCustomers($option);
//        dump($listAccessibleCustomers);
//        if (getenv('GOOGLE_DEVELOP_TOKEN_LEVEL') === 'test') {
//            if (in_array(1509096882, $listAccessibleCustomers)) {
//                $option['manager_customer_id'] = 1509096882;  //开发者
//                $option['login_customer_id']   = 1509096882;
//            }
//            if (in_array(1401879025, $listAccessibleCustomers)) {
//                $option['manager_customer_id'] = 1401879025;  //开发者
//                $option['login_customer_id']   = 1401879025;
//            }
//        }else{
        //正式开发者令牌2个参数默认不赋值
//        }
        $allRootAccounts = $this->googleAdsAccountService->runGetAccountHierarchy($option);
//        dump($allRootAccounts);
        foreach ($allRootAccounts as $rootAccountId => $accounts) {
            foreach ($accounts as $account) {
//                $customerId = $account['customer_id'];
//                dump($customerId, $thirdUser->id, $rootAccountId, $account);
//                if($account['customer_id'] == 1509096882)continue;
                $this->googleOAuthService->saveThirdUserAdvertiser($account['customer_id'], $thirdUser->id, $rootAccountId, $account,$thirdUser->merchant_id);
            }
        }
        $this->googleOAuthService->updateThirdUserDefault($thirdUser->id, 't');
//        return $this->successResponse($allAccounts);

    }

    //添加某个root广告账号的全部层级账号
    public function addRootCustomers()
    {
//        dump($options);
        $thirdUser = ThirdUser::where('is_default', 'f')->where('third_type', 'google')
            ->find();
        if (!$thirdUser || !$thirdUser->access_token) {
            dump('not found third user');
            return;
        }
        $option                  = [];
        $option['refresh_token'] = $thirdUser->access_token;
        $listAccessibleCustomers = $this->googleAdsAccountService->runListAccessibleCustomers($option);
        foreach ($listAccessibleCustomers as $rootAccountId) {
            $option['manager_customer_id'] = $rootAccountId;  //开发者
            $option['login_customer_id']   = $rootAccountId;
            try {
                // 获取当前 rootAccountId 的所有账户
                $allAccountsByRoot = $this->googleAdsAccountService->runGetAccountHierarchy($option);
//                dump($allAccountsByRoot,333);
                foreach ($allAccountsByRoot as $rootId => $accounts) {
                    foreach ($accounts as $account) {
                        $this->googleOAuthService->saveThirdUserAdvertiser(
                            $account['customer_id'],
                            $thirdUser->id,
                            $rootId,
                            $account,
                            $thirdUser->merchant_id
                        );
                    }
                }
                // 绑定的授权主体全部账号更新后将状态从 'f' 更新为 't'
                $this->googleOAuthService->updateThirdUserDefault($thirdUser->id, 't');
            } catch (\Exception $e) {
                // 记录错误日志并跳过当前循环
                Log::error("Error processing rootAccountId {$rootAccountId}: " . $e->getMessage());
                continue;
            }
            //绑定的授权主体全部账号更新后 将f改成t
            $this->googleOAuthService->updateThirdUserDefault($thirdUser->id, 't');
        }
//        return $this->successResponse($allAccounts);

    }


    /**
     * get assets
     * @throws ApiException
     */
    public function getAccountHierarchy($options)
    {
        $resourceName = $this->googleAdsAccountService->runGetAccountHierarchy($options);
        return $this->successResponse(['links_resource_name' => $resourceName]);


        $customers = $this->googleOAuthService->getGoogleAdCustomers([]);
        foreach ($customers as $customerId) {
            $googleAdsAssetService = new GoogleAdsAssetService($customerId);
            $resourceName          = $googleAdsAssetService->runListAssets($customerId);
        }

//        return $this->successResponse(['ads_list' => $resourceName]);
    }

    // 可以加入一些公共方法
    protected function successResponse($data): Response
    {
        return Json([
            'code' => 0,
            'msg' => 'ok',
            'data' => $data,
        ]);
    }

    protected function errorResponse($code, $message, $data = []): Response
    {
        return Json([
            'code' => $code,
            'msg' => $message ?: 'error',
            'data' => $data
        ]);
    }
}