<?php namespace Eae\Composers\Events;

use Carbon\Carbon;
use EventItem;
use Formatter;
use Input;
use Lang;
use Validator;
use Slideshow;

class SlideshowComposer
{
    public function compose($view)
    {
        $data = [
            "searchString" => 'Pandemia',
            "areaEvent" => [],
            "dateStart" => '',
            "dateEnd" => '',
            "locationID" => '',
            "pageNumber" => 1,
            "personID" => '',
            "event_type" => [],
            "searchPersonality" => '',
            "personalidade" => '',
            "my_life" => false,
            "event" => '',
        ];

        $eventMetaData = '';

        if (Input::has('search_for')) {
            $data['searchString'] = Formatter::transformItem(Input::get('search_for'), 'strip_tags|xss_clean|trim');
        }

        if (Input::has('tema')) {
            $data['areaEvent'] = Formatter::transformItem(Input::get('tema'), 'strip_tags|xss_clean|trim');
            $data['areaEvent'] = explode(',', $data['areaEvent']);
        }

        if (Input::has('data_inicio')) {
            $data['dateStart'] = Formatter::transformItem(Input::get('data_inicio'), 'strip_tags|xss_clean|trim');
        }

        if (Input::has('data_fim')) {
            $data['dateEnd'] = Formatter::transformItem(Input::get('data_fim'), 'strip_tags|xss_clean|trim');
            if (Input::has('data_inicio')) {
                if ($data['dateStart'] > $data['dateEnd']) {
                    $data['dateEnd'] = $data['dateStart'];
                }
            }
        }

        if (Input::has('local')) {
            $data['locationID'] = Formatter::transformItem(Input::get('local'), 'strip_tags|xss_clean|trim');
        }

        if (Input::has('search-personality')) {
            $data['searchPersonality'] = Formatter::transformItem(Input::get('search-personality'),
                'strip_tags|xss_clean|trim');
        }

        if (Input::has('personalidade')) {
            $data['personalidade'] = Formatter::transformItem(Input::get('personalidade'), 'strip_tags|xss_clean|trim');
        }

        if (Input::has('my_life')) {
            $data['my_life'] = Formatter::transformItem(Input::get('my_life'), 'strip_tags|xss_clean|trim');
        } else {
            $data['my_life'] = false;
        }

        if (Input::has('event_type')) {
            $data['event_type'] = Formatter::transformItem(Input::get('event_type'), 'strip_tags|xss_clean|trim');
            $data['event_type'] = explode(',', $data['event_type']);
        }

        if (Input::has('event')) {
            $data['event'] = Formatter::transformItem(Input::get('event'), 'strip_tags|xss_clean|trim');
        }

        $eventTypes = [
            EventItem::TYPE_AUDIO,
            EventItem::TYPE_IMAGE,
            EventItem::TYPE_TEXT,
            EventItem::TYPE_VIDEO
        ];

        $rules = [
            "searchString" => "max:100",
            "areaEvent" => "array|integer_array",
            "dateStart" => "date_format:Y-m-d",
            "dateEnd" => "date_format:Y-m-d",
            "locationID" => "integer",
            "personID" => "integer",
            "event_type" => "array",
            "searchPersonality" => "max:100",
            "personalidade" => "integer",
            "my_life" => "integer",
            "event" => "integer"
        ];

        $validator = Validator::make(
            $data,
            $rules
        );

        if ($validator->fails()) {
            $errors = $validator->messages();
            foreach ($data as $fieldName => $value) {
                if ($errors->has($fieldName)) {

                    if ($fieldName == "areaEvent" || $fieldName == 'event_type') {
                        $data[$fieldName] = [];
                    } else {
                        if ($fieldName == "my_life") {
                            $data[$fieldName] = false;
                        } else {


                            $data[$fieldName] = "";
                        }
                    }
                }
            }
        }

        if (!empty($data['searchPersonality'])) {
            $data['searchPersonality'] = getPeopleBySearchTerm($data['searchPersonality']);

        }

        if (!empty($data['personalidade']) || !empty($data['searchPersonality'])) {

            if (!empty($data['personalidade'])) {
                $data['personID'] = $data['personalidade'];
            } else {
                $data['personID'] = $data['searchPersonality'];
            }
        }


        $events = getEvents($data['searchString'], $data['areaEvent'],
            $data['dateStart'], $data['dateEnd'],
            $data['locationID'], $data['pageNumber'],
            $data['personID'], $data['event_type'], $data['my_life']);

        $locations = getLocations();
        $areas = getAreas();

        if ($data['personID'] == '') {
            $people = getPeople(4);
            $person = $data['personID'];
        } else {
            $people = getPeople(3);
            $person = getPerson($data['personID']);
        }

        $lastEvent = getLastEvent($data['searchString'], $data['areaEvent'],
            $data['dateStart'], $data['dateEnd'],
            $data['locationID'],
            $data['personID'], $data['event_type']);

        if (!empty($data["event"])) {
            $event = getEvent($data["event"], ['keywords']);
            $event = $event['event'];

            $eventMetaData = new \stdClass();
            if (!empty($event->meta_title)) {
                $eventMetaData->meta_title = $event->meta_title;
            } else {
                $eventMetaData->meta_title = 'Cronologias - '.cut_string(strip_tags($event->title), 100);
            }

            if (!empty($event->meta_description)) {
                $eventMetaData->meta_description = $event->meta_description;
            } else {
                $eventMetaData->meta_description = cut_string(strip_tags($event->content), 200);
            }

            if ($event->event_type == "image" || $event->event_type == 'video') {
                if (!empty($event->image->filename)) {
                    $eventMetaData->metaImage = getMediaUrl($event->image->filename, '620');
                } else {
                    $eventMetaData->metaImage = '';
                }
            }

            $eventMetaData->meta_url = lang_url('/eventos/?event='.$event->id);
            if (!empty($event->keywords)) {
                $eventMetaData->meta_keywords = '';
                foreach ($event->keywords as $keyword) {
                    $eventMetaData->meta_keywords .= $keyword->title.',';
                }

            }
        }

        $slideshow = Slideshow::with('image')
            ->full()
            ->where('website_objects.status', 'published')
            ->orderBy('website_objects.position', 'asc')
            ->get();

        $view->with([
            'events' => $events,
            'locations' => $locations,
            'areas' => $areas,
            'searchString' => $data['searchString'],
            'areaEvent' => $data['areaEvent'],
            'dateStart' => $data['dateStart'],
            'dateEnd' => $data['dateEnd'],
            'locationID' => $data['locationID'],
            'myLife' => $data['my_life'],
            'people' => $people,
            'activePerson' => $person,
            'eventType' => $data['event_type'],
            'eventMetaData' => $eventMetaData,
            'lastEvent' => $lastEvent,
            'slideshow' => $slideshow
        ]);
    }
}