<?php namespace App\Libs\Composers\CF;

use Visitor;
use VisitorToken;
use VisitorSession;
use VisitorPageView;

class CfThankYouTemplateComposer
{

    public function compose($view)
    {
        $data = $view->getData();
        $page = $data['object'];

        $queryString = \Request::server('QUERY_STRING');
        $url = \Request::server('REDIRECT_URL');

        $doRedirect = !empty($queryString);

        if ($doRedirect) {
            //Checks for tracked user and creates cookie if not tracked yet
            $token = \Request::cookie('visitor_token');
            if (!$token) {
                $this->_trackUser();
            }
        }

        $view->with(array(
            'doRedirect' => $doRedirect,
            'redirectUrl' => $url
        ));
    }

    protected function _trackUser()
    {
        $inputData = array(
            'email' => request()->get('email1'),
            'first_name' => request()->get('first_name'),
            'last_name' => request()->get('last_name'),
            'newsletter' => request()->get('newsletter_subscriber_c', false),
            'form_url' => request()->get('enquiry_url_c')
        );
        $validator = \Validator::make(
            $inputData,
            array(
                'email' => 'required|email|max:255',
                'first_name' => 'required|alpha_num_space|max:45',
                'last_name' => 'required|alpha_num_space|max:45',
                'form_url' => 'url'
            )
        );
        if ($validator->fails()) {
            return false;
        }
        $website = \Localization::getWebsite();
        //Checks if email already exists (new cookie)
        $visitor = Visitor::where('website_id', $website->id)
            ->where('email', $inputData['email'])
            ->first();

        if (!$visitor) {
            $visitor = new Visitor();
            $visitor->email = $inputData['email'];
            $visitor->first_name = $inputData['first_name'];
            $visitor->last_name = $inputData['last_name'];
            $visitor->website_id = $website->id;
            if ($inputData['newsletter']) {
                $visitor->asked_for_nl = true;
            } else {
                $visitor->asked_for_nl = false;
            }
            $visitor->save();
        }

        if ($inputData['form_url']) {
            $session = new VisitorSession();
            $session->visitor_id = $visitor->id;
            $session->visit_number = VisitorSession::where('visitor_id', $visitor->id)->count() + 1;
            $session->save();

            $pageView = new VisitorPageView();
            $pageView->visitor_id = $visitor->id;
            $pageView->session_id = $session->id;
            $pageView->request_url = $inputData['form_url'];
            $pageView->page = str_replace(url(), '', substr($inputData['form_url'], 0, 255));
            $pageView->ip = \Request::server('REMOTE_ADDR');
            $pageView->save();
        }

        //Create a new token
        $newToken = new VisitorToken(array('token' => random_string('sha1')));
        $visitor->tokens()->save($newToken);
        $cookie = \Cookie::forever('visitor_token', $newToken->token);

        \App::after(function ($request, $response) use ($cookie) {
            $response->headers->setCookie($cookie);
        });
        // \Response::withCookie($cookie);
        return true;
    }
}
