<?php

use Engelsystem\Models\Location;
use Engelsystem\ShiftCalendarRenderer;
use Engelsystem\ShiftsFilterRenderer;

/**
 *
 * @param Location              $location
 * @param ShiftsFilterRenderer  $shiftsFilterRenderer
 * @param ShiftCalendarRenderer $shiftCalendarRenderer
 * @return string
 */
function location_view(Location $location, ShiftsFilterRenderer $shiftsFilterRenderer, ShiftCalendarRenderer $shiftCalendarRenderer)
{
    $user = auth()->user();

    $assignNotice = '';
    if (config('signup_requires_arrival') && !$user->state->arrived) {
        $assignNotice = info(render_user_arrived_hint(), true);
    }

    $description = '';
    if ($location->description) {
        $description = '<h3>' . __('general.description') . '</h3>';
        $parsedown = new Parsedown();
        $description .= $parsedown->parse(htmlspecialchars($location->description));
    }

    $neededAngelTypes = '';
    if (auth()->can('admin_shifts') && $location->neededAngelTypes->isNotEmpty()) {
        $neededAngelTypes .= '<h3>' . __('location.required_angels') . '</h3><ul>';
        foreach ($location->neededAngelTypes as $neededAngelType) {
            if ($neededAngelType->count) {
                $neededAngelTypes .= '<li><a href="'
                    . url('angeltypes', ['action' => 'view', 'angeltype_id' => $neededAngelType->angelType->id])
                    . '">' . $neededAngelType->angelType->name
                    . '</a>: '
                    . $neededAngelType->count
                    . '</li>';
            }
        }
        $neededAngelTypes .= '</ul>';
    }

    $dect = '';
    if (config('enable_dect') && $location->dect) {
        $dect = heading(__('Contact'), 3)
            . description([__('general.dect') => sprintf(
                '<a href="tel:%s">%1$s</a>',
                htmlspecialchars($location->dect)
            )]);
    }

    $tabs = [];
    if ($location->map_url) {
        $tabs[__('location.map_url')] = sprintf(
            '<div class="map">'
            . '<iframe style="width: 100%%; min-height: 75vh; border: 0 none;" src="%s"></iframe>'
            . '</div>',
            htmlspecialchars($location->map_url)
        );
    }

    $tabs[__('general.shifts')] = div('first', [
        $shiftsFilterRenderer->render(url('/locations', [
            'action'  => 'view',
            'location_id' => $location->id,
        ]), ['locations' => [$location->id]]),
        $shiftCalendarRenderer->render(),
    ]);

    $selected_tab = 0;
    $request = request();
    if ($request->has('shifts_filter_day')) {
        $selected_tab = count($tabs) - 1;
    }

    $link = button(url('/admin/locations'), icon('chevron-left'), 'btn-sm', '', __('general.back'));
    return page_with_title(
        (auth()->can('admin_locations') ? $link . ' ' : '') .
        icon('pin-map-fill') . htmlspecialchars($location->name),
        [
        $assignNotice,
        auth()->can('admin_locations') ? buttons([
            button(
                url('/admin/locations/edit/' . $location->id),
                icon('pencil'),
                '',
                '',
                __('form.edit')
            ),
        ]) : '',
        $dect,
        $description,
        $neededAngelTypes,
        tabs($tabs, $selected_tab),
        ],
        true
    );
}

/**
 *
 * @param Location $location
 * @return string
 */
function location_name_render(Location $location)
{
    if (auth()->can('view_locations')) {
        return '<a href="' . location_link($location) . '">'
            . icon('pin-map-fill') . htmlspecialchars($location->name)
            . '</a>';
    }

    return icon('pin-map-fill') . htmlspecialchars($location->name);
}