<?php

declare(strict_types=1);

/*
 * This file is part of alox bundle for Contao.
 *
 * (c) Benjamin Roth
 *
 * @license commercial
 */

namespace vossmedien\AloxBundle\Controller\Frontend\Module;

use Contao\CoreBundle\Controller\FrontendModule\AbstractFrontendModuleController;
use Contao\CoreBundle\ServiceAnnotation\FrontendModule;
use Contao\Input;
use Contao\ModuleModel;
use Contao\Template;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use vossmedien\AloxBundle\API\Zvoove;

/**
 * @FrontendModule(JoblistModuleController::TYPE, category="miscellaneous")
 */
class JoblistModuleController extends AbstractFrontendModuleController
{
    public const TYPE = 'alox_joblist';

    /**
     * @var Zvoove
     */
    protected $api;

    public function __construct(Zvoove $api)
    {
        $this->api = $api;
    }


    protected function getResponse(Template $template, ModuleModel $model, Request $request): ?Response
    {
        $strFormId = 'joblist-form-' . $model->id;
        $arrSearchParams = [];
        $arrSetFilters = [];

        // Prepare search parameters
        if (Input::get('FORM_SUBMIT') == $strFormId)
        {
            if (Input::get('filter_keywords'))
            {
                $arrSearchParams['keywords'] = Input::get('filter_keywords');
                $arrSetFilters['filter_keywords'] = Input::get('filter_keywords');
            }

            if (Input::get('filter_vertragsart'))
            {
                $value = Input::get('filter_vertragsart');
                if (\is_array($value))
                {
                    $value = implode(',',$value);
                }
                $arrSearchParams['vaUuids'] = $value;
                $arrSetFilters['filter_vertragsart'] = Input::get('filter_vertragsart');
            }

            if (Input::get('filter_abteilung'))
            {
                $value = Input::get('filter_abteilung');
                if (\is_array($value))
                {
                    $value = implode(',',$value);
                }
                $arrSearchParams['abtUuids'] = $value;
                $arrSetFilters['filter_abteilung'] = Input::get('filter_abteilung');
            }
        }

        // Get (filtered) jobs
        $jobs = $this->api->getStellenFiltered($arrSearchParams);


        // Get filter options
        $filterVertragsarten = $this->api->getKatalogByRelationName('StelleVertragsart','ChildEntity');
        $filterAbteilung = $this->api->getKatalogByRelationName('StelleAbteilung','Abteilung');


        // Populate template vars
        if ($jobs !== null && $jobs->TotalItems > 0)
        {
            $template->jobs = $jobs;
        }

        if ($filterVertragsarten !== null && $filterVertragsarten->TotalItems > 0)
        {
            $template->filterVertragsarten = $filterVertragsarten;
        }

        if ($filterAbteilung !== null && $filterAbteilung->TotalItems > 0)
        {
            $template->filterAbteilung = $filterAbteilung;
        }

        $template->formSubmit = $strFormId;
        $template->formSetFilters = $arrSetFilters;


        return $template->getResponse();
    }

}