<?php

declare(strict_types=1);

use Fisharebest\Webtrees\Http\RequestHandlers\ControlPanel;
use Fisharebest\Webtrees\Http\RequestHandlers\ModuleDeleteSettings;
use Fisharebest\Webtrees\Http\RequestHandlers\ModulesAllAction;
use Fisharebest\Webtrees\I18N;
use Fisharebest\Webtrees\Module\ModuleAnalyticsInterface;
use Fisharebest\Webtrees\Module\ModuleBlockInterface;
use Fisharebest\Webtrees\Module\ModuleChartInterface;
use Fisharebest\Webtrees\Module\ModuleConfigInterface;
use Fisharebest\Webtrees\Module\ModuleCustomInterface;
use Fisharebest\Webtrees\Module\ModuleDataFixInterface;
use Fisharebest\Webtrees\Module\ModuleExternalUrlInterface;
use Fisharebest\Webtrees\Module\ModuleFooterInterface;
use Fisharebest\Webtrees\Module\ModuleHistoricEventsInterface;
use Fisharebest\Webtrees\Module\ModuleInterface;
use Fisharebest\Webtrees\Module\ModuleLanguageInterface;
use Fisharebest\Webtrees\Module\ModuleListInterface;
use Fisharebest\Webtrees\Module\ModuleMenuInterface;
use Fisharebest\Webtrees\Module\ModuleReportInterface;
use Fisharebest\Webtrees\Module\ModuleSidebarInterface;
use Fisharebest\Webtrees\Module\ModuleTabInterface;
use Fisharebest\Webtrees\Module\ModuleThemeInterface;
use Fisharebest\Webtrees\View;
use Illuminate\Support\Collection;

/**
 * @var Collection<int,string>          $deleted_modules
 * @var Collection<int,ModuleInterface> $modules
 * @var string                          $title
 */

?>

<?= view('components/breadcrumbs', ['links' => [route(ControlPanel::class) => I18N::translate('Control panel'), $title]]) ?>

<h1><?= $title ?></h1>

<?php foreach ($deleted_modules as $module_name) : ?>
    <div class="alert alert-warning" role="alert">
        <form method="post" action="<?= e(route(ModuleDeleteSettings::class)) ?>">
            <input type="hidden" name="module_name" value="<?= $module_name ?>">

            <?= I18N::translate('Preferences exist for the module “%s”, but this module no longer exists.', $module_name) ?>

            <button type="submit" class="btn btn-secondary">
                <?= I18N::translate('Delete the preferences for this module.') ?>
            </button>

            <?= csrf_field() ?>
        </form>
    </div>
<?php endforeach ?>

<form method="post" action="<?= e(route(ModulesAllAction::class)) ?>">
    <table
        id="wt-datatables-admin-modules"
        class="table table-bordered table-hover table-sm table-module-administration datatables"
        <?= view('lists/datatables-attributes') ?>
        data-info="false"
        data-paging="false"
        data-filter="false"
    >
        <caption class="visually-hidden">
            <?= I18N::translate('Module administration') ?>
        </caption>
        <thead>
            <tr>
                <th>
                    <?= I18N::translate('Module') ?>
                </th>
                <th>
                    <?= I18N::translate('Enabled') ?>
                </th>
                <th data-orderable="false">
                    <?= I18N::translate('Description') ?>
                </th>
                <th title="<?= I18N::translate('Preferences') ?>">
                    <?= view('icons/preferences') ?>
                    <span class="visually-hidden"><?= I18N::translate('Preferences') ?></span>
                </th>
                <th title="<?= I18N::translate('Menus') ?>">
                    <?= view('icons/menu') ?>
                    <span class="visually-hidden"><?= I18N::translate('Menus') ?></span>
                </th>
                <th title="<?= I18N::translate('Tabs') ?>">
                    <?= view('icons/tab') ?>
                    <span class="visually-hidden"><?= I18N::translate('Tabs') ?></span>
                </th>
                <th title="<?= I18N::translate('Sidebars') ?>">
                    <?= view('icons/sidebar') ?>
                    <span class="visually-hidden"><?= I18N::translate('Sidebars') ?></span>
                </th>
                <th title="<?= I18N::translate('Blocks') ?>">
                    <?= view('icons/block') ?>
                    <span class="visually-hidden"><?= I18N::translate('Blocks') ?></span>
                </th>
                <th title="<?= I18N::translate('Data fixes') ?>">
                    <?= view('icons/data-fix') ?>
                    <span class="visually-hidden"><?= I18N::translate('Data fixes') ?></span>
                </th>
                <th title="<?= I18N::translate('Charts') ?>">
                    <?= view('icons/chart') ?>
                    <span class="visually-hidden"><?= I18N::translate('Charts') ?></span>
                </th>
                <th title="<?= I18N::translate('Lists') ?>">
                    <?= view('icons/list') ?>
                    <span class="visually-hidden"><?= I18N::translate('Lists') ?></span>
                </th>
                <th title="<?= I18N::translate('Reports') ?>">
                    <?= view('icons/report') ?>
                    <span class="visually-hidden"><?= I18N::translate('Reports') ?></span>
                </th>
                <th title="<?= I18N::translate('Footers') ?>">
                    <?= view('icons/footer') ?>
                    <span class="visually-hidden"><?= I18N::translate('Footers') ?></span>
                </th>
                <th title="<?= I18N::translate('Tracking and analytics') ?>">
                    <?= view('icons/analytics') ?>
                    <span class="visually-hidden"><?= I18N::translate('Tracking and analytics') ?></span>
                </th>
                <th title="<?= I18N::translate('Historic events') ?>">
                    <?= view('icons/history') ?>
                    <span class="visually-hidden"><?= I18N::translate('Historic events') ?></span>
                </th>
                <th title="<?= I18N::translate('Themes') ?>">
                    <?= view('icons/theme') ?>
                    <span class="visually-hidden"><?= I18N::translate('Themes') ?></span>
                </th>
                <th title="<?= I18N::translate('Languages') ?>">
                    <?= view('icons/language') ?>
                    <span class="visually-hidden"><?= I18N::translate('Languages') ?></span>
                </th>
            </tr>
        </thead>

        <tbody>
            <?php foreach ($modules as $module) : ?>
                <tr>
                    <th scope="row" dir="auto">
                        <?= $module instanceof ModuleCustomInterface ? $module->customTranslations(I18N::languageTag())[$module->title()] ?? $module->title() : $module->title() ?>
                    </th>
                    <td class="text-center" data-sort="<?= $module->isEnabled() ?>">
                        <?= view('components/checkbox', ['label' => '', 'name' => 'status-' . $module->name(), 'checked' => $module->isEnabled()]) ?>
                    </td>
                    <td>
                        <?= $module instanceof ModuleCustomInterface ? $module->customTranslations(I18N::languageTag())[$module->description()] ?? $module->description() : $module->description() ?>
                        <?php if ($module instanceof ModuleCustomInterface) : ?>
                            <?= view('admin/custom-module-info', ['module' => $module]) ?>
                        <?php endif ?>
                        <?php if ($module instanceof ModuleExternalUrlInterface) : ?>
                            <?= view('admin/external-module-info', ['module' => $module]) ?>
                        <?php endif ?>
                    </td>
                    <td class="text-center" title="<?= I18N::translate('Preferences') ?>">
                        <?php if ($module instanceof ModuleConfigInterface) : ?>
                            <?php if ($module->isEnabled()) : ?>
                                <a href="<?= e($module->getConfigLink()) ?>" title="<?= I18N::translate('Preferences') ?>">
                                    <?= view('icons/preferences') ?>
                                    <span class="visually-hidden">
                                        <?= I18N::translate('Preferences') ?>
                                    </span>
                                </a>
                            <?php else : ?>
                                <?= view('icons/preferences') ?>
                            <?php endif ?>
                        <?php endif ?>
                    </td>
                    <td class="text-center" title="<?= I18N::translate('Menu') ?>">
                        <?php if ($module instanceof ModuleMenuInterface) : ?>
                            <?= view('icons/menu') ?>
                            <span class="visually-hidden"><?= I18N::translate('Menu') ?></span>
                        <?php else : ?>
                            -
                        <?php endif ?>
                    </td>
                    <td class="text-center" title="<?= I18N::translate('Tab') ?>">
                        <?php if ($module instanceof ModuleTabInterface) : ?>
                            <?= view('icons/tab') ?>
                            <span class="visually-hidden"><?= I18N::translate('Tab') ?></span>
                        <?php else : ?>
                            -
                        <?php endif ?>
                    </td>
                    <td class="text-center" title="<?= I18N::translate('Sidebar') ?>">
                        <?php if ($module instanceof ModuleSidebarInterface) : ?>
                            <?= view('icons/sidebar') ?>
                            <span class="visually-hidden"><?= I18N::translate('Sidebar') ?></span>
                        <?php else : ?>
                            -
                        <?php endif ?>
                    </td>
                    <td class="text-center">
                        <?php if ($module instanceof ModuleBlockInterface) : ?>
                            <?php if ($module->isUserBlock()) : ?>
                                <span title="<?= I18N::translate('My page') ?>">
                                    <?= view('icons/block-user') ?>
                                </span>
                                <span class="visually-hidden">
                                    <?= I18N::translate('My page') ?>
                                </span>
                            <?php endif ?>

                            <?php if ($module->isTreeBlock()) : ?>
                                <span title="<?= I18N::translate('Home page') ?>">
                                    <?= view('icons/block-tree') ?>
                                </span>
                                <span class="visually-hidden">
                                    <?= I18N::translate('Home page') ?>
                                </span>
                            <?php endif ?>
                        <?php else : ?>
                            -
                        <?php endif ?>
                    </td>
                    <td class="text-center" title="<?= I18N::translate('Data fix') ?>">
                        <?php if ($module instanceof ModuleDataFixInterface) : ?>
                            <?= view('icons/data-fix') ?>
                            <span class="visually-hidden"><?= I18N::translate('Data fix') ?></span>
                        <?php else : ?>
                            -
                        <?php endif ?>
                    </td>
                    <td class="text-center" title="<?= I18N::translate('Chart') ?>">
                        <?php if ($module instanceof ModuleChartInterface) : ?>
                            <?= view('icons/chart') ?>
                            <span class="visually-hidden"><?= I18N::translate('Chart') ?></span>
                        <?php else : ?>
                            -
                        <?php endif ?>
                    </td>
                    <td class="text-center" title="<?= I18N::translate('List') ?>">
                        <?php if ($module instanceof ModuleListInterface) : ?>
                            <?= view('icons/list') ?>
                            <span class="visually-hidden"><?= I18N::translate('List') ?></span>
                        <?php else : ?>
                            -
                        <?php endif ?>
                    </td>
                    <td class="text-center" title="<?= I18N::translate('Report') ?>">
                        <?php if ($module instanceof ModuleReportInterface) : ?>
                            <?= view('icons/report') ?>
                            <span class="visually-hidden"><?= I18N::translate('Report') ?></span>
                        <?php else : ?>
                            -
                        <?php endif ?>
                    </td>
                    <td class="text-center" title="<?= I18N::translate('Footer') ?>">
                        <?php if ($module instanceof ModuleFooterInterface) : ?>
                            <?= view('icons/footer') ?>
                            <span class="visually-hidden"><?= I18N::translate('Footer') ?></span>
                        <?php else : ?>
                            -
                        <?php endif ?>
                    </td>
                    <td class="text-center" title="<?= I18N::translate('Tracking and analytics') ?>">
                        <?php if ($module instanceof ModuleAnalyticsInterface) : ?>
                            <?= view('icons/analytics') ?>
                            <span class="visually-hidden"><?= I18N::translate('Tracking and analytics') ?></span>
                        <?php else : ?>
                            -
                        <?php endif ?>
                    </td>
                    <td class="text-center" title="<?= I18N::translate('Historic events') ?>">
                        <?php if ($module instanceof ModuleHistoricEventsInterface) : ?>
                            <?= view('icons/history') ?>
                            <span class="visually-hidden"><?= I18N::translate('Historic events') ?></span>
                        <?php else : ?>
                            -
                        <?php endif ?>
                    </td>
                    <td class="text-center" title="<?= I18N::translate('Theme') ?>">
                        <?php if ($module instanceof ModuleThemeInterface) : ?>
                            <?= view('icons/theme') ?>
                            <span class="visually-hidden"><?= I18N::translate('Theme') ?></span>
                        <?php else : ?>
                            -
                        <?php endif ?>
                    </td>
                    <td class="text-center" title="<?= I18N::translate('Language') ?>">
                        <?php if ($module instanceof ModuleLanguageInterface) : ?>
                            <?= view('icons/language') ?>
                            <span class="visually-hidden"><?= I18N::translate('Language') ?></span>
                        <?php else : ?>
                            -
                        <?php endif ?>
                    </td>
                </tr>
            <?php endforeach ?>
        </tbody>
    </table>

    <button class="btn btn-primary" type="submit">
        <?= view('icons/save') ?>
        <?= I18N::translate('save') ?>
    </button>

    <?= csrf_field() ?>
</form>
