<?php

/**
 * Shared details titlebar with optional back link, menu dropdown and action buttons.
 *
 * @var array $titlebar
 */

use MintyPHP\Session;

$titlebar = is_array($titlebar ?? null) ? $titlebar : [];
$title = (string) ($titlebar['title'] ?? '');
$backHref = (string) ($titlebar['backHref'] ?? '');
$backReturn = requestResolveReturnTarget();
if ($backReturn !== '') {
    $backHref = $backReturn;
}
$backTitle = (string) ($titlebar['backTitle'] ?? t('Cancel'));
$unsavedMessage = (string) ($titlebar['unsavedMessage'] ?? t('You have unsaved changes. Leave without saving?'));
$unsavedIndicatorLabel = (string) ($titlebar['unsavedIndicatorLabel'] ?? t('Unsaved changes'));
$unsavedIndicatorLabelOne = (string) ($titlebar['unsavedIndicatorLabelOne'] ?? t('Unsaved change (%d field)'));
$unsavedIndicatorLabelMany = (string) ($titlebar['unsavedIndicatorLabelMany'] ?? t('Unsaved changes (%d fields)'));
$actionPolicyEnabled = !array_key_exists('actionPolicy', $titlebar) ? true : !empty($titlebar['actionPolicy']);
$actions = is_array($titlebar['actions'] ?? null) ? $titlebar['actions'] : [];
$menuItems = is_array($titlebar['menuItems'] ?? null) ? $titlebar['menuItems'] : [];
$appendCssClass = static function (string $baseClass, string $appendClass): string {
    $combined = trim($baseClass . ' ' . $appendClass);
    return preg_replace('/\s+/', ' ', $combined) ?? $combined;
};
$resolveToneClass = static function (string $tone, string $detailActionKind, string $name, string $value): string {
    $normalizedTone = strtolower(trim($tone));
    if ($normalizedTone === 'success') {
        return 'app-action-success';
    }
    if ($normalizedTone === 'danger') {
        return 'app-action-danger';
    }
    if ($normalizedTone === 'neutral') {
        return '';
    }

    $normalizedActionKind = strtolower(trim($detailActionKind));
    if (in_array($normalizedActionKind, ['delete', 'danger', 'purge', 'revoke'], true)) {
        return 'app-action-danger';
    }

    $normalizedName = strtolower(trim($name));
    $normalizedValue = strtolower(trim($value));
    if (
        $normalizedName === 'action'
        && in_array($normalizedValue, ['create', 'create_close', 'save_close'], true)
    ) {
        return 'app-action-success';
    }

    return '';
};

?>
<div
  class="app-details-titlebar"
  data-detail-unsaved-message="<?php e($unsavedMessage); ?>"
  data-detail-unsaved-indicator-label="<?php e($unsavedIndicatorLabel); ?>"
  data-detail-unsaved-indicator-label-one="<?php e($unsavedIndicatorLabelOne); ?>"
  data-detail-unsaved-indicator-label-many="<?php e($unsavedIndicatorLabelMany); ?>"
  <?php if ($actionPolicyEnabled): ?>data-detail-action-policy="1"<?php endif; ?>
>
  <h1>
    <?php if ($backHref !== ''): ?>
      <a href="<?php e($backHref); ?>" title="<?php e($backTitle); ?>"><i class="bi bi-arrow-left"></i></a>
    <?php endif; ?>
    <?php e($title); ?>
  </h1>
  <div class="app-details-titlebar-actions">
    <?php if ($menuItems): ?>
      <details class="dropdown">
        <summary role="button" class="outline secondary"><i class="bi bi-three-dots"></i></summary>
        <ul dir="rtl">
          <?php foreach ($menuItems as $menuItem): ?>
            <?php
            $item = is_array($menuItem) ? $menuItem : [];
            $itemType = (string) ($item['type'] ?? 'link');
            $itemLabel = (string) ($item['label'] ?? '');
            if ($itemLabel === '') {
              continue;
            }
            ?>
            <li>
              <?php if ($itemType === 'form'): ?>
                <?php
                $itemMethod = strtoupper((string) ($item['method'] ?? 'POST'));
                $itemAction = (string) ($item['action'] ?? '');
                $itemConfirm = (string) ($item['confirm'] ?? '');
                $itemConfirmTitle = (string) ($item['confirmTitle'] ?? '');
                $itemConfirmConfirmLabel = (string) ($item['confirmConfirmLabel'] ?? '');
                $itemConfirmCancelLabel = (string) ($item['confirmCancelLabel'] ?? '');
                $itemConfirmVariant = strtolower(trim((string) ($item['confirmVariant'] ?? '')));
                $itemConfirmFocus = strtolower(trim((string) ($item['confirmFocus'] ?? '')));
                $itemButtonClass = (string) ($item['class'] ?? 'transparent');
                $itemNeedsCsrf = !array_key_exists('csrf', $item) ? true : !empty($item['csrf']);
                $itemTarget = (string) ($item['target'] ?? '');
                $itemDetailActionKind = strtolower(trim((string) ($item['detailActionKind'] ?? '')));
                $itemDetailSubmitLock = strtolower(trim((string) ($item['detailSubmitLock'] ?? '')));
                $itemTone = (string) ($item['tone'] ?? '');
                $itemName = (string) ($item['name'] ?? '');
                $itemValue = (string) ($item['value'] ?? '');
                $itemFields = is_array($item['fields'] ?? null) ? $item['fields'] : [];
                $itemButtonClass = $appendCssClass(
                  $itemButtonClass,
                  $resolveToneClass($itemTone, $itemDetailActionKind, $itemName, $itemValue)
                );
                ?>
                <?php if ($itemAction !== ''): ?>
                  <form
                    method="<?php e($itemMethod); ?>"
                    action="<?php e($itemAction); ?>"
                    <?php if ($itemTarget !== ''): ?>target="<?php e($itemTarget); ?>"<?php endif; ?>
                    <?php if ($itemConfirm !== ''): ?>data-detail-confirm-message="<?php e($itemConfirm); ?>"<?php endif; ?>
                    <?php if ($itemConfirmTitle !== ''): ?>data-detail-confirm-title="<?php e($itemConfirmTitle); ?>"<?php endif; ?>
                    <?php if ($itemConfirmConfirmLabel !== ''): ?>data-detail-confirm-confirm-label="<?php e($itemConfirmConfirmLabel); ?>"<?php endif; ?>
                    <?php if ($itemConfirmCancelLabel !== ''): ?>data-detail-confirm-cancel-label="<?php e($itemConfirmCancelLabel); ?>"<?php endif; ?>
                    <?php if ($itemConfirmVariant !== ''): ?>data-detail-confirm-variant="<?php e($itemConfirmVariant); ?>"<?php endif; ?>
                    <?php if ($itemConfirmFocus !== ''): ?>data-detail-confirm-focus="<?php e($itemConfirmFocus); ?>"<?php endif; ?>
                    <?php if ($itemDetailActionKind !== ''): ?>data-detail-action-kind="<?php e($itemDetailActionKind); ?>"<?php endif; ?>
                    <?php if ($itemDetailSubmitLock !== ''): ?>data-detail-submit-lock="<?php e($itemDetailSubmitLock); ?>"<?php endif; ?>
                  >
                    <?php if ($itemNeedsCsrf && $itemMethod !== 'GET'): ?>
                      <?php Session::getCsrfInput(); ?>
                    <?php endif; ?>
                    <?php foreach ($itemFields as $fieldName => $fieldValue): ?>
                      <?php if ($fieldName !== ''): ?>
                        <input type="hidden" name="<?php e((string) $fieldName); ?>" value="<?php e((string) $fieldValue); ?>">
                      <?php endif; ?>
                    <?php endforeach; ?>
                    <button type="submit" class="<?php e($itemButtonClass); ?>">
                      <?php e($itemLabel); ?>
                    </button>
                  </form>
                <?php endif; ?>
              <?php else: ?>
                <?php
                $itemHref = (string) ($item['href'] ?? '');
                $itemLinkClass = (string) ($item['class'] ?? 'transparent');
                $itemTarget = (string) ($item['target'] ?? '');
                $itemRel = (string) ($item['rel'] ?? '');
                $itemTone = (string) ($item['tone'] ?? '');
                $itemDetailActionKind = strtolower(trim((string) ($item['detailActionKind'] ?? '')));
                $itemName = (string) ($item['name'] ?? '');
                $itemValue = (string) ($item['value'] ?? '');
                $itemLinkClass = $appendCssClass(
                  $itemLinkClass,
                  $resolveToneClass($itemTone, $itemDetailActionKind, $itemName, $itemValue)
                );
                ?>
                <?php if ($itemHref !== ''): ?>
                  <a role="button" class="<?php e($itemLinkClass); ?>" href="<?php e($itemHref); ?>"
                    <?php if ($itemTarget !== ''): ?>target="<?php e($itemTarget); ?>"<?php endif; ?>
                    <?php if ($itemRel !== ''): ?>rel="<?php e($itemRel); ?>"<?php endif; ?>>
                    <?php e($itemLabel); ?>
                  </a>
                <?php endif; ?>
              <?php endif; ?>
            </li>
          <?php endforeach; ?>
        </ul>
      </details>
    <?php endif; ?>

    <?php foreach ($actions as $action): ?>
      <?php
      $item = is_array($action) ? $action : [];
      $itemLabel = (string) ($item['label'] ?? '');
      if ($itemLabel === '') {
        continue;
      }
      $itemType = (string) ($item['type'] ?? 'submit');
      $itemClass = (string) ($item['class'] ?? 'secondary outline');
      $itemForm = (string) ($item['form'] ?? '');
      $itemName = (string) ($item['name'] ?? '');
      $itemValue = (string) ($item['value'] ?? '');
      $itemConfirm = (string) ($item['confirm'] ?? '');
      $itemConfirmTitle = (string) ($item['confirmTitle'] ?? '');
      $itemConfirmConfirmLabel = (string) ($item['confirmConfirmLabel'] ?? '');
      $itemConfirmCancelLabel = (string) ($item['confirmCancelLabel'] ?? '');
      $itemConfirmVariant = strtolower(trim((string) ($item['confirmVariant'] ?? '')));
      $itemConfirmFocus = strtolower(trim((string) ($item['confirmFocus'] ?? '')));
      $itemDetailActionKind = strtolower(trim((string) ($item['detailActionKind'] ?? '')));
      $itemDetailSubmitLock = strtolower(trim((string) ($item['detailSubmitLock'] ?? '')));
      $itemTone = (string) ($item['tone'] ?? '');
      $itemDisabled = !empty($item['disabled']);
      $itemDetailSavePrimary = false;
      if (array_key_exists('detailSavePrimary', $item)) {
          $itemDetailSavePrimary = (bool) $item['detailSavePrimary'];
      } else {
          $itemDetailSavePrimary = strtolower(trim($itemName)) === 'action'
            && in_array(strtolower(trim($itemValue)), ['save', 'create'], true);
      }
      if ($itemDetailActionKind === '') {
          $normalizedItemName = strtolower(trim($itemName));
          $normalizedItemValue = strtolower(trim($itemValue));
          if ($normalizedItemName === 'action' && in_array($normalizedItemValue, ['save', 'create'], true)) {
              $itemDetailActionKind = 'save';
          } elseif ($normalizedItemName === 'action' && in_array($normalizedItemValue, ['save_close', 'create_close'], true)) {
              $itemDetailActionKind = 'save-close';
          }
      }
      $itemClass = $appendCssClass(
        $itemClass,
        $resolveToneClass($itemTone, $itemDetailActionKind, $itemName, $itemValue)
      );
      ?>
      <button
        type="<?php e($itemType); ?>"
        <?php if ($itemForm !== ''): ?>form="<?php e($itemForm); ?>"<?php endif; ?>
        <?php if ($itemName !== ''): ?>name="<?php e($itemName); ?>"<?php endif; ?>
        <?php if ($itemValue !== ''): ?>value="<?php e($itemValue); ?>"<?php endif; ?>
        <?php if ($itemConfirm !== ''): ?>data-detail-confirm-message="<?php e($itemConfirm); ?>"<?php endif; ?>
        <?php if ($itemConfirmTitle !== ''): ?>data-detail-confirm-title="<?php e($itemConfirmTitle); ?>"<?php endif; ?>
        <?php if ($itemConfirmConfirmLabel !== ''): ?>data-detail-confirm-confirm-label="<?php e($itemConfirmConfirmLabel); ?>"<?php endif; ?>
        <?php if ($itemConfirmCancelLabel !== ''): ?>data-detail-confirm-cancel-label="<?php e($itemConfirmCancelLabel); ?>"<?php endif; ?>
        <?php if ($itemConfirmVariant !== ''): ?>data-detail-confirm-variant="<?php e($itemConfirmVariant); ?>"<?php endif; ?>
        <?php if ($itemConfirmFocus !== ''): ?>data-detail-confirm-focus="<?php e($itemConfirmFocus); ?>"<?php endif; ?>
        <?php if ($itemDetailActionKind !== ''): ?>data-detail-action-kind="<?php e($itemDetailActionKind); ?>"<?php endif; ?>
        <?php if ($itemDetailSubmitLock !== ''): ?>data-detail-submit-lock="<?php e($itemDetailSubmitLock); ?>"<?php endif; ?>
        <?php if ($itemDetailSavePrimary): ?>data-detail-save-primary="1"<?php endif; ?>
        <?php if ($itemDisabled): ?>disabled<?php endif; ?>
        class="<?php e($itemClass); ?>"
      >
        <?php e($itemLabel); ?>
      </button>
    <?php endforeach; ?>
  </div>
</div>
