<?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\BpsAdController;
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');
//    });
//});

//三平台合并后的路由2025-1-9
Route::group('/marketing', function () {
    Route::group('/v18', function () {
        Route::group('/ad', function () {
            Route::post('/list', [BpsAdController::class, 'listAds']);
            Route::post('/export', [BpsAdController::class, 'exportAdsToExcel']);
//            Route::group('/status', function () {
//                Route::post('/update', [BpsAdController::class, 'updateAdStatus']);
////                Route::post('/get', [AdController::class, 'getAdStatus']);
//            });
        })->middleware([
            app\middleware\JwtLocal::class,
            app\middleware\OauthThirdCheck::class,
        ]);

        Route::group('/campaign', function () {
            Route::post('/list', [BpsAdController::class, 'listCampaigns']);
            Route::post('/export', [BpsAdController::class, 'exportCampaignsToExcel']);
//            Route::group('/status', function () {
//                Route::post('/update', [BpsAdController::class, 'updateCampaignStatus']);
//                Route::post('/get', [BpsAdController::class, 'getCampaignStatus']);
//        });
        })->middleware([
            app\middleware\JwtLocal::class,
            app\middleware\OauthThirdCheck::class,
        ]);
        Route::group('/adset', function () {
            Route::post('/list', [BpsAdController::class, 'listAdsets']);
            Route::post('/export', [BpsAdController::class, 'exportAdsetsToExcel']);
//            Route::group('/status', function () {
//                Route::post('/update', [BpsAdController::class, 'updateGroupStatus']);
////                Route::post('/get', [BpsAdController::class, 'getGroupStatus']);
//            });
        })->middleware([
            app\middleware\JwtLocal::class,
            app\middleware\OauthThirdCheck::class,
        ]);
        Route::group('/account', function () {
            Route::post('/list', [BpsAdController::class, 'listThirdUsers']);
            Route::post('/export', [BpsAdController::class, 'exportAccountsToExcel']);
        })->middleware([
            app\middleware\JwtLocal::class,
            app\middleware\OauthThirdCheck::class,
        ]);
        Route::group('/badge', function () {
            Route::post('/list', [BpsAdController::class, 'listAdBadges']);
        })->middleware([
            app\middleware\JwtLocal::class,
            app\middleware\OauthThirdCheck::class,
        ]);
        Route::group('/creative', function () {
            Route::post('/list', [BpsAdController::class, 'listCreatives']);
            Route::post('/export', [BpsAdController::class, 'exportCreativesToExcel']);
            Route::post('/chart', [BpsAdController::class, 'listCharts']);
        })->middleware([
            app\middleware\JwtLocal::class,
            app\middleware\OauthThirdCheck::class,
        ]);
        Route::group('/dashboard', function () {
            Route::post('/ad_card', [BpsAdController::class, 'listCards']);
        })->middleware([
            app\middleware\JwtLocal::class,
            app\middleware\OauthThirdCheck::class,
        ]);
        Route::group('/landing', function () {
            Route::post('/list', [BpsAdController::class, 'listLandingUrls']);
//            Route::post('/export', [BpsAdController::class, 'exportLandingUrlsToExcel']);
//            Route::post('/chart', [BpsAdController::class, 'listCharts']);
        })->middleware([
            app\middleware\JwtLocal::class,
            app\middleware\OauthThirdCheck::class,
        ]);

    });
});

//未合并前使用的google广告路由
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\JwtLocal::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\JwtLocal::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\JwtLocal::class,
            app\middleware\OauthCheck::class,
        ]);
        Route::group('/asset', function () {
            Route::post('/list', [AdController::class, 'listAssets']);
        })->middleware([
            app\middleware\JwtLocal::class,
            app\middleware\OauthCheck::class,
        ]);
        Route::group('/customer', function () {
            Route::post('/list', [CustomerController::class, 'getCustomerList']);
            Route::post('/list_resource', [CustomerController::class, 'accessibleCustomers']);
            Route::post('/list_tree', [CustomerController::class, 'accountHierarchy']);
            Route::post('/access_role', [CustomerController::class, 'accountAccess']);
        })->middleware([
            app\middleware\JwtLocal::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']);
            Route::post('/list_third_status', [OAuthController::class, 'listThirdUserInfos']);
        })->middleware([
            app\middleware\JwtLocal::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,X-Request-Id, Accept, Origin, Host, Connection, Accept-Encoding, Accept-Language, Keep-Alive, User-Agent, Content-Type',
    ]);
    return $response;
});