<?php
use Orchard\FeatureFlags\Context\AccountContext;
use Orchard\FeatureFlags\FeatureService;
use Orchard\Service\GrassAuth;
use Orchard\Service\Ows\Grass as OwsGrass;
use Orchard\Service\StaticAsset as StaticAssetService;

$frontendAppName = 'frontend-contract';
$cssName = 'frontend-contract.css';
$productSplitBundleName = 'product-splits.bundle.js';
$trackSplitBundleName = 'track-splits.bundle.js';
$productTerritorySplitBundleName = 'product-territory-splits.bundle.js';
$productSplitDivId = 'oa-product-arrangement-table';
$trackSplitDivId = 'oa-track-arrangement-table';
$producTerritorySplitDivId = 'oa-product-territory-arrangement-table';
$jsInitProductSplits = 'initProductSplits';
$jsInitTrackSplits = 'initTrackSplits';
$jsInitProductTerritorySplits = 'initProductTerritorySplits';

$staticAssetService = new StaticAssetService($this->awsConfig);
$logger = Zend_Registry::get('applicationLoggerOA');
$featuresServiceClient = new FeatureService($logger);

$userContext = AccountContext::fromLegacy((string)$_SESSION['S_USERID'], 'oa');

$isProductTerritorySplitEnabled = $featuresServiceClient->isVariant(
    'product_by_territory_split',
    'enabled',
    $userContext
);

$assetManifestBlob = $staticAssetService->getStaticAssetVersionFromS3('frontend-js-utils-bootstrap', 'assetManifest');
$assetPath = json_decode($assetManifestBlob, true)['main.js'];
$getJsUtilsBootstrapUrl = $staticAssetService->getCreateReactAppStaticAssetUrl($assetPath, 'frontend-js-utils-bootstrap');

$manifestData = $staticAssetService->loadStaticAssetsManifestJson($frontendAppName, 'manifest.json');
$version = $staticAssetService->getStaticAssetVersionFromJson($manifestData);
$frontendContractCss = $staticAssetService->getStaticAssetUrl($frontendAppName, $version, $cssName);
$productSplitsJsUrl = $staticAssetService->getStaticAssetUrl($frontendAppName, $version, $productSplitBundleName);
$trackSplitsJsUrl = $staticAssetService->getStaticAssetUrl($frontendAppName, $version, $trackSplitBundleName);
$productTerritorySplitsJsUrl = $staticAssetService->getStaticAssetUrl($frontendAppName, $version, $productTerritorySplitBundleName);

// Grab the GRASS session.
$grassAuth = new GrassAuth(new OwsGrass(logger: $logger));
$grassRefreshUrl = OwsGrass::OA_REFRESH_URI;
$grassBaseUrl = OwsGrass::PROXY_PATH;
$grassSession = $grassAuth->fetchGrassToken()->getJSTokenManagerServiceFormat($grassRefreshUrl, $grassBaseUrl);
$options = array(
    'grassSession'=> $grassSession
);
$jsUrl = array();
$jsUrl[] = "'" . $trackSplitsJsUrl. "'";
?>
<div id="<?= $trackSplitDivId ?>"></div>
<?php
if ($isProductTerritorySplitEnabled) {
    $jsUrl[] = "'" . $productTerritorySplitsJsUrl. "'";
?>
    <div id="<?= $producTerritorySplitDivId ?>"></div>
<?php } ?>
<?php

$jsUrl[] = "'" . $productSplitsJsUrl. "'";
?>
<div id="<?= $productSplitDivId ?>"></div>

<link type="text/css" rel="stylesheet" href="/css/global-redesign.css"/>
<link type="text/css" rel="stylesheet" href="<?=$frontendContractCss?>"/>
<script src="<?=$getJsUtilsBootstrapUrl?>"></script>
<script type="text/javascript">

    var isProductTerritorySplitEnabled = <?= ($isProductTerritorySplitEnabled) ? $isProductTerritorySplitEnabled : 0; ?>;
    window.JsUtilsBootstrap.initApplication(
        <?=json_encode($options)?>,
        <?="[" . implode(",", $jsUrl) . "]"?>,
        function() {
            var trackRootDomElement = document.getElementById('<?=$trackSplitDivId?>');
            <?='window.'. $jsInitTrackSplits . '(trackRootDomElement);'?>

            var productRootDomElement = document.getElementById('<?=$productSplitDivId?>');
            <?='window.'. $jsInitProductSplits . '(productRootDomElement);'?>

            if (isProductTerritorySplitEnabled) {
                var productRootDomElement = document.getElementById('<?=$producTerritorySplitDivId?>');
                <?='window.'. $jsInitProductTerritorySplits . '(productRootDomElement);'?>
            }
        }
    );
</script>
