<?php

use Icinga\Module\Monitoring\Web\Widget\StateBadges;

if (! $this->compact): ?>
<div class="controls">
    <?= $this->tabs ?>
    <?= $this->paginator ?>
    <div class="sort-controls-container">
        <?= $this->limiter ?>
        <?= $this->sortBox ?>
        <a href="<?= $this->href('monitoring/list/hostgroup-grid')->addFilter(clone $this->filterEditor->getFilter()) ?>" class="grid-toggle-link"
           title="<?= $this->translate('Toogle grid view mode') ?>">
            <?= $this->icon('th-list', null, ['class' => '-active']) ?>
            <?= $this->icon('th-thumb-empty', null, ['class' => '-inactive']) ?>
        </a>
    </div>
    <?= $this->filterEditor ?>
</div>
<?php endif ?>

<div class="content">
<?php /** @var \Icinga\Module\Monitoring\DataView\Hostgroup $hostGroups */ if (! $hostGroups->hasResult()): ?>
    <p><?= $this->translate('No host groups found matching the filter.') ?></p>
</div>
<?php return; endif ?>
    <table class="common-table table-row-selectable" data-base-target="_next">
    <thead>
        <tr>
            <th></th>
            <th><?= $this->translate('Host Group') ?></th>
            <th><?= $this->translate('Host States') ?></th>
            <th></th>
            <th><?= $this->translate('Service States') ?></th>
        </tr>
    </thead>
    <tbody>
    <?php foreach ($hostGroups->peekAhead($this->compact) as $hostGroup): ?>
        <tr>
            <td class="count-col">
                <span class="badge"><?= $hostGroup->hosts_total ?></span>
            </td>
            <th>
                <?= $this->qlink(
                    $hostGroup->hostgroup_alias,
                    $this
                        ->url('monitoring/list/hosts')
                        ->setParams(['hostgroup_name' => $hostGroup->hostgroup_name])
                        ->addFilter($this->filterEditor->getFilter()),
                    ['sort' => 'host_severity'],
                    ['title' => sprintf(
                        $this->translate('List all hosts in the group "%s"'),
                        $hostGroup->hostgroup_alias
                    )]
                ) ?>
            </th>
            <td>
                <?php
                $stateBadges = new StateBadges();
                $stateBadges
                    ->setUrl('monitoring/list/hosts')
                    ->setBaseFilter($this->filterEditor->getFilter())
                    ->add(
                        StateBadges::STATE_UP,
                        $hostGroup->hosts_up,
                        array(
                            'host_state'        => 0,
                            'hostgroup_name'    => $hostGroup->hostgroup_name,
                            'sort'              => 'host_severity'
                        ),
                        'List %u host that is currently in state UP in the host group "%s"',
                        'List %u hosts which are currently in state UP in the host group "%s"',
                        array($hostGroup->hosts_up, $hostGroup->hostgroup_alias)
                    )
                    ->add(
                        StateBadges::STATE_DOWN,
                        $hostGroup->hosts_down_unhandled,
                        array(
                            'host_state'        => 1,
                            'host_acknowledged' => 0,
                            'host_in_downtime'  => 0,
                            'hostgroup_name'    => $hostGroup->hostgroup_name,
                            'sort'              => 'host_severity'
                        ),
                        'List %u host that is currently in state DOWN in the host group "%s"',
                        'List %u hosts which are currently in state DOWN in the host group "%s"',
                        array($hostGroup->hosts_down_unhandled, $hostGroup->hostgroup_alias)
                    )
                    ->add(
                        StateBadges::STATE_DOWN_HANDLED,
                        $hostGroup->hosts_down_handled,
                        array(
                            'host_state'      => 1,
                            'host_handled'    => 1,
                            'hostgroup_name'  => $hostGroup->hostgroup_name,
                            'sort'            => 'host_severity'
                        ),
                        'List %u host that is currently in state DOWN (Acknowledged) in the host group "%s"',
                        'List %u hosts which are currently in state DOWN (Acknowledged) in the host group "%s"',
                        array($hostGroup->hosts_down_handled, $hostGroup->hostgroup_alias)
                    )
                    ->add(
                        StateBadges::STATE_UNREACHABLE,
                        $hostGroup->hosts_unreachable_unhandled,
                        array(
                            'host_state'        => 2,
                            'host_acknowledged' => 0,
                            'host_in_downtime'  => 0,
                            'hostgroup_name'    => $hostGroup->hostgroup_name,
                            'sort'              => 'host_severity'
                        ),
                        'List %u host that is currently in state UNREACHABLE in the host group "%s"',
                        'List %u hosts which are currently in state UNREACHABLE in the host group "%s"',
                        array($hostGroup->hosts_unreachable_unhandled, $hostGroup->hostgroup_alias)
                    )
                    ->add(
                        StateBadges::STATE_UNREACHABLE_HANDLED,
                        $hostGroup->hosts_unreachable_handled,
                        array(
                            'host_state'      => 2,
                            'host_handled'    => 1,
                            'hostgroup_name'  => $hostGroup->hostgroup_name,
                            'sort'            => 'host_severity'
                        ),
                        'List %u host that is currently in state UNREACHABLE (Acknowledged) in the host group "%s"',
                        'List %u hosts which are currently in state UNREACHABLE (Acknowledged) in the host group "%s"',
                        array($hostGroup->hosts_unreachable_handled, $hostGroup->hostgroup_alias)
                    )
                    ->add(
                        StateBadges::STATE_PENDING,
                        $hostGroup->hosts_pending,
                        array(
                            'host_state'        => 99,
                            'hostgroup_name'    => $hostGroup->hostgroup_name,
                            'sort'              => 'host_severity'
                        ),
                        'List %u host that is currently in state PENDING in the host group "%s"',
                        'List %u hosts which are currently in state PENDING in the host group "%s"',
                        array($hostGroup->hosts_pending, $hostGroup->hostgroup_alias)
                    );
                echo $stateBadges->render();
                ?>
            </td>
            <td class="count-col">
                <?= $this->qlink(
                    $hostGroup->services_total,
                    $this
                        ->url('monitoring/list/services')
                        ->setParams(['hostgroup_name' => $hostGroup->hostgroup_name])
                        ->addFilter($this->filterEditor->getFilter()),
                    ['sort' => 'service_severity'],
                    [
                        'title' => sprintf(
                            $this->translate('List all services of all hosts in host group "%s"'),
                            $hostGroup->hostgroup_alias
                        ),
                        'class' => 'badge'
                    ]
                ) ?>
            </td>
            <td>
                <?php
                $stateBadges = new StateBadges();
                $stateBadges
                    ->setUrl('monitoring/list/services')
                    ->setBaseFilter($this->filterEditor->getFilter())
                    ->add(
                        StateBadges::STATE_OK,
                        $hostGroup->services_ok,
                        array(
                            'service_state'     => 0,
                            'hostgroup_name'    => $hostGroup->hostgroup_name,
                            'sort'              => 'service_severity'
                        ),
                        'List %u service that is currently in state OK on hosts in the host group "%s"',
                        'List %u services which are currently in state OK on hosts in the host group "%s"',
                        array($hostGroup->services_ok, $hostGroup->hostgroup_alias)
                    )
                    ->add(
                        StateBadges::STATE_CRITICAL,
                        $hostGroup->services_critical_unhandled,
                        array(
                            'service_state'         => 2,
                            'service_acknowledged'  => 0,
                            'service_in_downtime'   => 0,
                            'host_problem'          => 0,
                            'hostgroup_name'        => $hostGroup->hostgroup_name,
                            'sort'                  => 'service_severity'
                        ),
                        'List %u service that is currently in state CRITICAL on hosts in the host group "%s"',
                        'List %u services which are currently in state CRITICAL on hosts in the host group "%s"',
                        array($hostGroup->services_critical_unhandled, $hostGroup->hostgroup_alias)
                    )
                    ->add(
                        StateBadges::STATE_CRITICAL_HANDLED,
                        $hostGroup->services_critical_handled,
                        array(
                            'service_state'     => 2,
                            'service_handled'   => 1,
                            'hostgroup_name'    => $hostGroup->hostgroup_name,
                            'sort'              => 'service_severity'
                        ),
                        'List %u service that is currently in state CRITICAL (Acknowledged) on hosts in the host group "%s"',
                        'List %u services which are currently in state CRITICAL (Acknowledged) on hosts in the host group "%s"',
                        array($hostGroup->services_critical_handled, $hostGroup->hostgroup_alias)
                    )
                    ->add(
                        StateBadges::STATE_UNKNOWN,
                        $hostGroup->services_unknown_unhandled,
                        array(
                            'service_state'         => 3,
                            'service_acknowledged'  => 0,
                            'service_in_downtime'   => 0,
                            'host_problem'          => 0,
                            'hostgroup_name'        => $hostGroup->hostgroup_name,
                            'sort'                  => 'service_severity'
                        ),
                        'List %u service that is currently in state UNKNOWN on hosts in the host group "%s"',
                        'List %u services which are currently in state UNKNOWN on hosts in the host group "%s"',
                        array($hostGroup->services_unknown_unhandled, $hostGroup->hostgroup_alias)
                    )
                    ->add(
                        StateBadges::STATE_UNKNOWN_HANDLED,
                        $hostGroup->services_unknown_handled,
                        array(
                            'service_state'     => 3,
                            'service_handled'   => 1,
                            'hostgroup_name'    => $hostGroup->hostgroup_name,
                            'sort'              => 'service_severity'
                        ),
                        'List %u service that is currently in state UNKNOWN (Acknowledged) on hosts in the host group "%s"',
                        'List %u services which are currently in state UNKNOWN (Acknowledged) on hosts in the host group "%s"',
                        array($hostGroup->services_unknown_handled, $hostGroup->hostgroup_alias)

                    )
                    ->add(
                        StateBadges::STATE_WARNING,
                        $hostGroup->services_warning_unhandled,
                        array(
                            'service_state'         => 1,
                            'service_acknowledged'  => 0,
                            'service_in_downtime'   => 0,
                            'host_problem'          => 0,
                            'hostgroup_name'        => $hostGroup->hostgroup_name,
                            'sort'                  => 'service_severity'
                        ),
                        'List %u service that is currently in state WARNING on hosts in the host group "%s"',
                        'List %u services which are currently in state WARNING on hosts in the host group "%s"',
                        array($hostGroup->services_warning_unhandled, $hostGroup->hostgroup_alias)
                    )
                    ->add(
                        StateBadges::STATE_WARNING_HANDLED,
                        $hostGroup->services_warning_handled,
                        array(
                            'service_state'     => 1,
                            'service_handled'   => 1,
                            'hostgroup_name'    => $hostGroup->hostgroup_name,
                            'sort'              => 'service_severity'
                        ),
                        'List %u service that is currently in state WARNING (Acknowledged) on hosts in the host group "%s"',
                        'List %u services which are currently in state WARNING (Acknowledged) on hosts in the host group "%s"',
                        array($hostGroup->services_warning_handled, $hostGroup->hostgroup_alias)
                    )
                    ->add(
                        StateBadges::STATE_PENDING,
                        $hostGroup->services_pending,
                        array(
                            'service_state'     => 99,
                            'hostgroup_name'    => $hostGroup->hostgroup_name,
                            'sort'              => 'service_severity'
                        ),
                        'List %u service that is currently in state PENDING on hosts in the host group "%s"',
                        'List %u services which are currently in state PENDING on hosts in the host group "%s"',
                        array($hostGroup->services_pending, $hostGroup->hostgroup_alias)
                    );
                echo $stateBadges->render();
                ?>
            </td>
        </tr>
    <?php endforeach ?>
    </tbody>
    </table>
<?php if ($hostGroups->hasMore()): ?>
    <div class="action-links">
        <?= $this->qlink(
            $this->translate('Show More'),
            $this->url()->without(array('showCompact', 'limit')),
            null,
            array(
                'class'             => 'action-link',
                'data-base-target'  => '_next'
            )
        ) ?>
    </div>
<?php endif ?>
</div>
