<?php
use Eae\Exception\InvalidConfigurationException;

class AjaxController extends Controller{
    public function __construct()  {
        //$this->beforeFilter('csrf', array('on' => 'post'));
    }

    public function getSearchAutoComplete() {
        $searchString = '';

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

        $dataToReturn = getSearchAutoComplete($searchString);

        return Response::json($dataToReturn);
    }

    public function getPeopleSearchAutoComplete() {
        $searchString = '';

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

        $dataToReturn = getPeopleSearchAutoComplete($searchString);

        return Response::json($dataToReturn);
    }

    public function getEvents() {
        
        $data = [
            "searchString" => '',
            "areaEvent" => array(),
            "dateStart" =>'',
            "dateEnd" => '',
            "locationID" => '',
            "pageNumber" => 0,
            "personID" => '',
            "event_type" => array(),
            "searchPersonality" => '',
            "personalidade" => ''
        ];
       

        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('local')) {
            $data['locationID'] = Formatter::transformItem(Input::get('local'), 'strip_tags|xss_clean|trim');
        }

        if(Input::has('page')) {
            $data['pageNumber'] = Formatter::transformItem(Input::get('page'), '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('event_type')) {
            $data['event_type'] = Formatter::transformItem(Input::get('event_type'), 'strip_tags|xss_clean|trim');
            $data['event_type'] = explode(',', $data['event_type']);
        }
        
        $eventTypes = [
            EventItem::TYPE_AUDIO,
            EventItem::TYPE_IMAGE,
            EventItem::TYPE_TEXT,
            EventItem::TYPE_VIDEO
        ];
        
        $rules = array(
            "searchString" => "max:100",
            "areaEvent" => "array|integer_array",
            "dateStart" => "date_format:Y-m-d",
            "dateEnd" => "date_format:Y-m-d",
            "locationID" => "integer",
            "pageNumber" => "integer",
            "personID" => "integer",
            "event_type" => "array",
            "searchPersonality" => "max:100",
            "personalidade" => "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] = array();
                    }elseif($fieldName == "pageNumber"){
                        $data[$fieldName] = 0;    
                    }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'];
            }
        }

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

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

        $template = 'frontend/partials/eventos/events';
        $noResultTemplate = 'frontend/partials/eventos/no-results';

        //Create the view to return
        
        if( sizeOf($events)== 0){
            $view = View::make($noResultTemplate)->render();    
        }else{
            $view = View::make($template,
                array(
                    "events" => $events
                )
            )->render();    
        }

        //Current Page
        $currentPage = $events->getCurrentPage();

        //Last Page
        $lastPage = $events->getLastPage();

        //Check if has more pages
        $hasMore = $currentPage >= $lastPage  ? false : true;

        return Response::json(
            array(
                "view" => $view,
                "status" => true,
                "hasMore" => $hasMore,
                "currentPage" => $currentPage,
                "totalEvents" => $events->getTotal()
            )
        );
    }

    public function getEvent() {
        $eventID = '';
        $event = null;
        $nextEventID = null;
        $previousEventID = null;
        $eventMedia = null;
        $eventDates = null;
        $datesDescriptionAttribute = null;
        $with = array('image','area', 'eventDates');

        if(Input::has('event_id')) {
            $eventID = Formatter::transformItem(Input::get('event_id'), 'strip_tags|xss_clean|trim');
        }

        if(!empty($eventID)) {
            $eventInfo = getEvent($eventID, $with);

//            $eventID = 81877;
            $eventMedia = getMediaItens($eventID);
            $event = $eventInfo['event'];
            $eventDates = $event->eventDates;
            $datesDescriptionAttribute = getDatesDescriptionAttribute($eventDates, $event->hide_month, $event->hide_day);
            $nextEventID = $eventInfo['nextEventID'];
            $previousEventID = $eventInfo['previousEventID'];
        }

        if(!empty($event)) {
            $template = 'frontend/partials/eventos/event';
            //Create the view to return
            $view = View::make($template,
                array(
                    "event" => $event,
                    "mediaItens" => $eventMedia,
                    "datesDescriptionAttributeYear" => $datesDescriptionAttribute['dateDescYear'],
                    "datesDescriptionAttribute" => $datesDescriptionAttribute['dateDesc']
                )
            )->render();
            $event = $view;
        }

        return Response::json(
            array(
                "event" => $event,
                "nextEventID" => $nextEventID,
                "previousEventID" => $previousEventID
            )
        );
    }

    public function getTimelineDecadeEvents(){
        $eventID = '';
        $events = getTimelineDecadeEvents();
        $template = 'frontend/partials/homepage/timeline-decade';

        if(Input::has('event_id')) {
            $eventID = Formatter::transformItem(Input::get('event_id'), 'strip_tags|xss_clean|trim');
        }

        //Create the view to return
        $view = View::make($template,
            array(
                "events" => $events,
                "previousEventID" => $eventID
            )
        )->render();

        return Response::json(
            array(
                "view" => $view
            )
        );
    }

    public function getTimelineYearEvents(){
        $eventID = '';
        $firstTime = '';
        if(Input::has('event_id')) {
            $eventID = Formatter::transformItem(Input::get('event_id'), 'strip_tags|xss_clean|trim');
        }
        if(Input::has('first_time')) {
            $firstTime = Formatter::transformItem(Input::get('first_time'), 'strip_tags|xss_clean|trim');
        }
        $events = getTimelineYearEvents($eventID, $firstTime);
        $nextEvents = $events['nextEvents'];
        $nextEventsHasMore = count($nextEvents) < 50 ? false : true;
        $previousEvents = $events['previousEvents']->reverse();
        $previousEventsHasMore = count($previousEvents) < 50 ? false : true;
        $template = 'frontend/partials/homepage/timeline-year';

        //Create the views to return
        $previousEventsView = View::make($template,
            array(
                "events" => $previousEvents
            )
        )->render();

        $nextEventsView = View::make($template,
            array(
                "events" => $nextEvents
            )
        )->render();

        return Response::json(
            array(
                "nextEvents" => $nextEventsView,
                "previousEvents" => $previousEventsView,
                "nextEventsHasMore" => $nextEventsHasMore,
                "previousEventsHasMore" => $previousEventsHasMore
            )
        );
    }

    public function getTimelineMonthEvents(){
        $eventID = '';
        $firstTime = '';
        if(Input::has('event_id')) {
            $eventID = Formatter::transformItem(Input::get('event_id'), 'strip_tags|xss_clean|trim');
        }
        if(Input::has('first_time')) {
            $firstTime = Formatter::transformItem(Input::get('first_time'), 'strip_tags|xss_clean|trim');
        }
        $events = getTimelineMonthEvents($eventID, $firstTime);
        $nextEvents = $events['nextEvents'];
        $nextEventsHasMore = count($nextEvents) < 50 ? false : true;
        $previousEvents = $events['previousEvents']->reverse();
        $previousEventsHasMore = count($previousEvents) < 50 ? false : true;
        $template = 'frontend/partials/homepage/timeline-month';

        //Create the views to return
        $previousEventsView = View::make($template,
            array(
                "events" => $previousEvents
            )
        )->render();

        $nextEventsView = View::make($template,
            array(
                "events" => $nextEvents
            )
        )->render();

        return Response::json(
            array(
                "nextEvents" => $nextEventsView,
                "previousEvents" => $previousEventsView,
                "nextEventsHasMore" => $nextEventsHasMore,
                "previousEventsHasMore" => $previousEventsHasMore
            )
        );
    }

    public function getPeople() {

        $people = getPeople();

        if(!empty($people)) {
            $template = 'frontend/partials/people/people';
            //Create the view to return
            $view = View::make($template,
                array(
                    "people" => $people
                )
            )->render();
            $peopleView = $view;
        }

        return Response::json(
            array(
                "people" => $peopleView
            )
        );
    }
}
