#!/usr/bin/env php
<?php

if (count($argv) !== 2) {
    fprintf(STDERR, 'Usage: %s {version}%s', $argv[0], PHP_EOL);
    fprintf(STDERR, 'Example: %s 12%s', $argv[0], PHP_EOL);
    exit(1);
}

use Symfony\Component\Filesystem\Filesystem;
use PMG\BingAds\Generator\Config;
use PMG\BingAds\Generator\Generator;


require __DIR__.'/../vendor/autoload.php';

const NS = 'PMG\\BingAds\\';
$version = $argv[1];
$defaultConfig = [
    'constructorParamsDefaultToNull' => true,
];

$configs = [
    new Config(array_replace($defaultConfig, [
        'inputFile' => sprintf('https://adinsight.api.bingads.microsoft.com/Api/Advertiser/AdInsight/v%s/AdInsightService.svc?singleWsdl', $version),
        'sandboxWsdl' => sprintf('https://adinsight.api.sandbox.bingads.microsoft.com/Api/Advertiser/AdInsight/v%s/AdInsightService.svc?singleWsdl', $version),
        'wsdlNamespace' => sprintf('Microsoft.Advertiser.AdInsight.Api.Service.V%s', $version),
        'outputDir' => __DIR__.'/../src/main/AdInsight',
        'namespaceName' => NS.'AdInsight',
    ])),
    new Config(array_replace($defaultConfig, [
        'inputFile' => sprintf('https://campaign.api.bingads.microsoft.com/Api/Advertiser/CampaignManagement/v%s/CampaignManagementService.svc?singleWsdl', $version),
        'sandboxWsdl' => sprintf('https://campaign.api.sandbox.bingads.microsoft.com/Api/Advertiser/CampaignManagement/v%s/CampaignManagementService.svc?singleWsdl', $version),
        'wsdlNamespace' => sprintf('https://bingads.microsoft.com/CampaignManagement/v%s', $version),
        'outputDir' => __DIR__.'/../src/main/CampaignManagement',
        'namespaceName' => NS.'CampaignManagement',
    ])),
    new Config(array_replace($defaultConfig, [
        'inputFile' => sprintf('https://clientcenter.api.bingads.microsoft.com/Api/Billing/v%s/CustomerBillingService.svc?singleWsdl', $version),
        'sandboxWsdl' => sprintf('https://clientcenter.api.sandbox.bingads.microsoft.com/Api/Billing/v%s/CustomerBillingService.svc?singleWsdl', $version),
        'wsdlNamespace' => sprintf('https://bingads.microsoft.com/Billing/v%s', $version),
        'outputDir' => __DIR__.'/../src/main/CustomerBilling',
        'namespaceName' => NS.'CustomerBilling',
    ])),
    new Config(array_replace($defaultConfig, [
        'inputFile' => sprintf('https://clientcenter.api.bingads.microsoft.com/Api/CustomerManagement/v%s/CustomerManagementService.svc?singleWsdl', $version),
        'sandboxWsdl' => sprintf('https://clientcenter.api.sandbox.bingads.microsoft.com/Api/CustomerManagement/v%s/CustomerManagementService.svc?singleWsdl', $version),
        'wsdlNamespace' => sprintf('https://bingads.microsoft.com/Customer/v%s', $version),
        'outputDir' => __DIR__.'/../src/main/CustomerManagement',
        'namespaceName' => NS.'CustomerManagement',
    ])),
    new Config(array_replace($defaultConfig, [
        'inputFile' => sprintf('https://reporting.api.bingads.microsoft.com/Api/Advertiser/Reporting/v%s/ReportingService.svc?singleWsdl', $version),
        'sandboxWsdl' => sprintf('https://reporting.api.sandbox.bingads.microsoft.com/Api/Advertiser/Reporting/v%s/ReportingService.svc?singleWsdl', $version),
        'wsdlNamespace' => sprintf('https://bingads.microsoft.com/Reporting/v%s', $version),
        'outputDir' => __DIR__.'/../src/main/Reporting',
        'namespaceName' => NS.'Reporting',
    ])),
    new Config(array_replace($defaultConfig, [
        'inputFile' => sprintf('https://bulk.api.bingads.microsoft.com/Api/Advertiser/CampaignManagement/v%s/BulkService.svc?singleWsdl', $version),
        'sandboxWsdl' => sprintf('https://bulk.api.sandbox.bingads.microsoft.com/Api/Advertiser/CampaignManagement/v%s/BulkService.svc?singleWsdl', $version),
        'wsdlNamespace' => sprintf('https://bingads.microsoft.com/CampaignManagement/v%s', $version),
        'outputDir' => __DIR__.'/../src/main/Bulk',
        'namespaceName' => NS.'Bulk',
    ])),
];

$fs = new Filesystem();
$generator = new Generator();

foreach ($configs as $config) {
    $fs->remove($config->get('outputDir'));
    $generator->generate($config);
}
