<?php

namespace app\controller;

use app\service\GoogleOAuthService;
use app\service\GoogleAdsAccountService;
use Google\ApiCore\ApiException;
use support\Request;
use support\Response;
use DI\Annotation\Inject;

//use app\model\ThirdUserAdvertiser;

class CustomerController
{

    /**
     * @Inject
     * @var GoogleOAuthService
     */
    private $googleOAuthService;


    /**
     * @Inject
     * @var GoogleAdsAccountService
     */
    private $googleAdsAccountService;

    //绑定某个广告账号
    public function bindAdvertiser(Request $request)
    {
        $customerId         = $request->input('customer_id'); // 需要绑定的广告账号 ID
        $thirdUserId        = $request->input('third_user_id'); // bps_third_user的id
        $googleOAuthService = new GoogleOAuthService();
        $hasThirdUser       = $googleOAuthService->bindThirdUserAdvertiser($customerId, $thirdUserId);
        if (!$hasThirdUser) {
            return $this->errorResponse(300, 'Invalid state parameter');
        }
        return $this->successResponse($hasThirdUser);
    }

    public function getCustomerList(Request $request)
    {
        $thirdUserId = $request->input('third_user_id'); // bps_third_user的id

        $googleOAuthService = new GoogleOAuthService();
        $hasThirdUser       = $googleOAuthService->getCustomerList($thirdUserId);
        if (!$hasThirdUser) {
            return $this->errorResponse(300, 'Invalid state parameter');
        }
        return $this->successResponse($hasThirdUser);

    }


    public function accessibleCustomers(Request $request)
    {
        $options                      = $request->all();
        $options['refresh_token']     = $request->refresh_token;
        $options['login_customer_id'] = $request->login_customer_id;
        // 继续处理 Google Ads API 操作
        return $this->listAccessibleCustomers($options);
    }

    public function accountHierarchy(Request $request)
    {
        $options = $request->all();

        $options['refresh_token']     = $request->refresh_token;
        $options['login_customer_id'] = $request->login_customer_id;
        // 继续处理 Google Ads API 操作
        return $this->getAccountHierarchy($options);
    }

    //管理用户访问权限
    public function accountAccess(Request $request)
    {
        $options = $request->all();

        $options['refresh_token']     = $request->refresh_token;
        $options['login_customer_id'] = $request->login_customer_id;

        // 继续处理 Google Ads API 操作
        return $this->getAccountAccess($options);
    }


    /**
     * 关联广告客户ID
     * @throws ApiException
     */
    public function listAccessibleCustomers($options): Response
    {
        $resourceName = $this->googleAdsAccountService->runListAccessibleCustomers($options);
        return $this->successResponse(['links_resource_name' => $resourceName]);
    }

    /**
     * 广告主体下层级账号
     * @throws ApiException
     */
    public function getAccountHierarchy($options): Response
    {
//        dump($options);
        $resourceName = $this->googleAdsAccountService->runGetAccountHierarchy($options);
        return $this->successResponse(['links_resource_name' => $resourceName]);
    }

    /**
     * 管理用户访问权限
     * @throws ApiException
     */
    public function getAccountAccess($options): Response
    {
//        dump($options);

        $resourceName = $this->googleAdsAccountService->runGetAccountAccess($options);
        return $this->successResponse(['links_resource_name' => $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
        ]);
    }


}