<?php
/**
 * This file is part of webman.
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the MIT-LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 *
 * @author    walkor<walkor@workerman.net>
 * @copyright walkor<walkor@workerman.net>
 * @link      http://www.workerman.net/
 * @license   http://www.opensource.org/licenses/mit-license.php MIT License
 */

//use app\controller\IndexController;
use app\controller\AdController;
use app\controller\OAuthController;
use app\controller\CustomerController;
use app\controller\GoogleAdsController;
use support\Request;
use Webman\Route;


//Route::group('/googleads', function () {
//    Route::group('/campaign', function () {
//        Route::post('/create', 'GoogleAdsController@createCampaign');
//    });
//    Route::group('/campaign_budget', function () {
//        Route::post('/create', 'GoogleAdsController@createCampaignBudget');
//    });
//});

Route::group('/googleads', function () {

    Route::group('/v18', function () {
        Route::group('/ad', function () {
            Route::post('/list', [AdController::class, 'listAds']);
            Route::post('/export', [AdController::class, 'exportAdsToExcel']);
            Route::group('/status', function () {
                Route::post('/update', [AdController::class, 'updateAdStatus']);
//                Route::post('/get', [AdController::class, 'getAdStatus']);
            });
        })->middleware([
            app\middleware\Jwt::class,
            app\middleware\OauthCheck::class,
        ]);

        Route::group('/campaign', function () {
            Route::post('/list', [AdController::class, 'listCampaigns']);
            Route::post('/export', [AdController::class, 'exportCampaignsToExcel']);
            Route::group('/status', function () {
                Route::post('/update', [AdController::class, 'updateCampaignStatus']);
//                Route::post('/get', [AdController::class, 'getCampaignStatus']);
            });
        })->middleware([
            app\middleware\Jwt::class,
            app\middleware\OauthCheck::class,
        ]);
        Route::group('/adgroup', function () {
            Route::post('/list', [AdController::class, 'listGroups']);
            Route::post('/export', [AdController::class, 'exportGroupsToExcel']);
            Route::group('/status', function () {
                Route::post('/update', [AdController::class, 'updateGroupStatus']);
//                Route::post('/get', [AdController::class, 'getGroupStatus']);
            });
        })->middleware([
            app\middleware\Jwt::class,
            app\middleware\OauthCheck::class,
        ]);
        Route::group('/asset', function () {
            Route::post('/list', [AdController::class, 'listAssets']);
        })->middleware([
            app\middleware\Jwt::class,
            app\middleware\OauthCheck::class,
        ]);
        Route::group('/customer', function () {
            Route::post('/list', [CustomerController::class, 'getCustomerList']);
            Route::post('/bind', [CustomerController::class, 'bindAdvertiser']);
            Route::post('/list_resource', [CustomerController::class, 'accessibleCustomers']);
            Route::post('/list_tree', [CustomerController::class, 'accountHierarchy']);
        })->middleware([
            app\middleware\Jwt::class,
            app\middleware\OauthCheck::class,
        ]);

        Route::group('/auth', function () {
            Route::get('/code', [OAuthController::class, 'getAuthCode']);
            Route::post('/callback', [OAuthController::class, 'handleCallback']);
            Route::post('/refresh_token_get', [OAuthController::class, 'getRefreshToken']);
            Route::post('/refresh_token_use', [OAuthController::class, 'useRefreshToken']);
            Route::post('/refresh_token_test', [OAuthController::class, 'testRefreshToken']);
            Route::post('/refresh_token_revoke', [OAuthController::class, 'revokeRefreshToken']);
        })->middleware([
            app\middleware\Jwt::class,
        ]);
    });


    Route::group('/campaign', function () {
        Route::post('/create', [GoogleAdsController::class, 'createCampaign']);
    });
    Route::group('/campaign', function () {
        Route::post('/list', [GoogleAdsController::class, 'listCampaigns']);
//        Route::post('/list', [GoogleAdsController::class, 'listCampaignsNext']);
    });
    Route::group('/campaign', function () {
        Route::post('/update', [GoogleAdsController::class, 'updateCampaign']);
    });
    Route::group('/campaign', function () {
        Route::post('/delete', [GoogleAdsController::class, 'deleteCampaign']);
    });
    Route::group('/campaign_budget', function () {
        Route::post('/create', [GoogleAdsController::class, 'createCampaignBudget']);
    });
    Route::group('/group', function () {
        Route::post('/create', [GoogleAdsController::class, 'createGroup']);
    });
    Route::group('/group', function () {
        Route::post('/update', [GoogleAdsController::class, 'updateGroup']);
    });
    Route::group('/group', function () {
        Route::post('/list', [GoogleAdsController::class, 'listGroups']);
    });
    Route::group('/asset', function () {
        Route::post('/list', [GoogleAdsController::class, 'listAssets']);
    });
    Route::group('/asset_relation', function () {
        Route::post('/list', [GoogleAdsController::class, 'listAssetRelations']);
    });
    Route::group('/ad', function () {
        Route::post('/update', [GoogleAdsController::class, 'updateAd']);
        Route::post('/list', [GoogleAdsController::class, 'listAds']);
        Route::group('/responsive_search', function () {
            Route::post('/list', [GoogleAdsController::class, 'listResponsiveSearchAds']);
            Route::post('/update', [GoogleAdsController::class, 'updateResponsiveSearchAd']);
        });
        Route::group('/fields', function () {
            Route::post('/list', [GoogleAdsController::class, 'listGoogleAdsFields']);
        });
    });

    Route::group('/account_link', function () {
        Route::post('/create', [GoogleAdsController::class, 'createLinkManagerToClient']);
    });

    Route::group('/datedata', function () {
        Route::post('/list', [GoogleAdsController::class, 'listDateDatas']);
    });
});

Route::fallback(function (Request $request) {
    $response = strtoupper($request->method()) === 'OPTIONS' ? response('', 204) : response('', 404);
    $response->withHeaders([
        'Access-Control-Allow-Credentials' => 'true',
        'Access-Control-Allow-Origin' => "*",
        'Access-Control-Allow-Methods' => '*',
        'Access-Control-Allow-Headers' => 'Authorization, Content-Length, X-CSRF-Token, Accept, Origin, Host, Connection, Accept-Encoding, Accept-Language, Keep-Alive, User-Agent, Content-Type',
    ]);
    return $response;
});