<?php namespace App\Libs\Composers;

use App\Models\EventItem;
use App\Models\Publication;
use App\Models\Sector;
use Illuminate\Support\Facades\DB;
use App\Models\WebsiteObject;
use Illuminate\Support\Facades\Lang;

class ArticlesFilterBlockComposer
{
    public function compose($view)
    {
        $articleType = $view->block->article_type;

        $redirectPath = '';
        if (!empty($view->block->cta1)) {
            $link = json_decode($view->block->cta1);
            if (!empty($link) && $link->objectId) {
                $wo = WebsiteObject::where('website_object_id', $link->objectId)
                    ->first();
                $redirectPath = "$wo->lang_uri";
            }
        }

        if ($articleType == 'publications') {
            $availYears = Publication::full()->select(DB::raw('DISTINCT YEAR(date) as dateYear'))
                ->where('list_on_publications', 1)
                ->where('status', 'published')
                ->orderBy('dateYear', 'desc')
                ->get();

            $types = array();
            $types['all'] = array("id" => "all", "label" => Lang::get('frontend.all'));
            $types['white_paper'] = array("id" => "white_paper", "label" => Lang::get('frontend.white_paper'));
            $types['fact_sheet'] = array("id" => "fact_sheet", "label" => Lang::get('frontend.fact_sheet'));
            $types['quick_guide'] = array("id" => "quick_guide", "label" => Lang::get('frontend.quick_guide'));
            $types['report'] = array("id" => "report", "label" => Lang::get('frontend.report'));
            $types['other'] = array("id" => "other", "label" => Lang::get('frontend.other'));

            $years = array();

            array_push($years, array("id" => "all", "label" => Lang::get('frontend.all')));

            foreach ($availYears as $availYear) {
                $years[$availYear->dateYear] = array("id" => $availYear->dateYear, "label" => $availYear->dateYear);
            }

            $view->with(array(
                'filters' => array(
                    "year" => array("id" => "year", "name" => Lang::get('frontend.year'), "values" => $years),
                    "type" => array("id" => "type", "name" => Lang::get('frontend.type'), "values" => $types)
                ),
                'redirectPath' => $redirectPath
            ));
        } else if ($articleType == 'news') {
            $year = date('Y');

            $sectors = Sector::full()
                ->orderBy('website_objects.position', 'asc')->get();

            $types = array();
            $types["all"] = array("id" => "all", "label" => Lang::get('frontend.all'));
            $types["news"] = array("id" => "news", "label" => Lang::get('frontend.news'));
            $types["in_media"] = array("id" => "in_media", "label" => Lang::get('frontend.in_media'));
            $types["press_release"] = array("id" => "press_release", "label" => Lang::get('frontend.press_release'));

            $years = array();
            $availYears = DB::table('news')
                ->select(DB::raw('DISTINCT YEAR(date) as year'))
                ->orderBy('year', 'desc')
                ->whereNull('deleted_at')
                ->get();

            array_push($years, array("id" => "all", "label" => Lang::get('frontend.all')));
            foreach ($availYears as $year) {
                $years[$year->year] = array("id" => $year->year, "label" => $year->year);
            }
            $industries = array();
            array_push($industries, array("id" => "all", "label" => Lang::get('frontend.all')));
            foreach ($sectors as $sector) {
                array_push($industries, array("id" => $sector->id, "label" => $sector->title));
            }

            $view->with(array(
                'filters' => array(
                    "year" => array("id" => "year", "name" => Lang::get('frontend.year'), "values" => $years),
                    "type" => array("id" => "type", "name" => Lang::get('frontend.type'), "values" => $types),
                ),
                'redirectPath' => $redirectPath
            ));
        } else { //events
            $year = date('Y');
            $month = date('m');
            $day = date('d');

            $nextMonthsQuery = EventItem::full()
                ->select(DB::raw("DISTINCT YEAR(date) as year, MONTH(date) as month"))
                // ->whereRaw(DB::raw('end_date >= \''.$year.'-'.$month.'-01\''))
                ->where('status', 'published')
                ->where('no_index', false)
                ->orderBy('year', 'desc');


            if ($articleType === 'events-past') {
                $nextMonthsQuery->whereRaw(DB::raw('end_date < \'' . $year . '-' . $month . '-' . $day . '\''))
                    ->orderBy('month', 'desc');
            } else {
                $nextMonthsQuery->whereRaw(DB::raw('end_date >= \'' . $year . '-' . $month . '-' . $day . '\''))
                    ->orderBy('month', 'asc');
            }

            $nextMonths = $nextMonthsQuery->get();

            $monthsNames = [
                'january', 'february', 'march', 'april', 'may', 'june', 'july', 'august',
                'september', 'october', 'november', 'december'
            ];

            $years = ["" => array("id" => "", "label" => Lang::get('frontend.all'))];
            $months = [];

            foreach ($nextMonths as $nextMonth) {
                if (empty($years[$nextMonth->year])) {
                    $years[$nextMonth->year] = [
                        'id' => $nextMonth->year,
                        'label' => $nextMonth->year
                    ];
                    $months[$nextMonth->year] = ["" => array("id" => "", "label" => Lang::get('frontend.all'))];
                }

                $label = $monthsNames[($nextMonth->month - 1)];
                $months[$nextMonth->year][$nextMonth->month] = array(
                    "id" => $nextMonth->month, "label" => Lang::get('frontend.'.$label), "sufix" => $nextMonth->year
                );
            }

            $view->with(array(
                'filters' => array(
                    'year' => array("id" => "year", "name" => Lang::get('frontend.year'), "values" => $years, "child" => "month"),
                    'month' => array("id" => "month", "name" => Lang::get('frontend.month'), "values" => $months, "parent" => "year"),
                ),
                'redirectPath' => $redirectPath
            ));
        }
    }
}
