<?php

  class EmailController extends Controller
  {

    public function __construct()
    {
      $this->beforeFilter('csrf', ['on' => 'post']);
    }

    public function getIndex()
    {
      $data = [
        'email' => Input::get('user_email')
      ];

      $rules = [];
      $rules['email'] = 'required|max:100|email|exists:users,email';

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

      if ($validator->fails()) {
        $response['success'] = FALSE;
        $response['result'] = $validator->messages();
        App::abort(404);
      }

      $userMail = $this->_getUserEmail($data['email']);

      $mailView = View::make('frontend.email.confirmation', $userMail);

      return Response::make($mailView);

    }

    public function getOptout()
    {

      $data = [
        'email' => Input::get('user_email')
      ];

      $rules = [];
      $rules['email'] = 'required|max:100|email|exists:users,email';

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

      if ($validator->fails()) {
        $response['success'] = FALSE;
        $response['result'] = $validator->messages();
        App::abort(404);
      }

      EmailerService::optOut($data['email']);

      $view = View::make('frontend.pages.optout');

      return Response::make($view);
    }

    private function _getUserEmail($userMAIL)
    {
      $query = User::join('trackings', 'trackings.user_id', '=', 'users.id')
        ->orderBy('trackings.page_views', 'desc')
        ->select('users.id', 'users.email', 'trackings.page_views')// just to avoid fetching anything from joined table
        ->join('submissions', 'users.id', '=', 'submissions.user_id')
        ->whereNotNull('submissions.final_image_id')
        ->where('users.email', $userMAIL)
        ->with([
          'submission' => function ($query) {
            $query->full()->with('finalImage');
          }
        ]);

      $userDB = $query->first();


      $trackingHash = $userDB->tracking->hash;
      $user['shareUrl'] = lang_url('/', getActiveLanguage()) . '?utm_content=' . $trackingHash;;
      $user['resultImage'] = getMediaUrl($userDB->submission->finalImage->filename);
      $user['userEmail'] = $userDB->email;
      $user['onlineVersionUrl'] = '';
      $user['optOutLink'] = '';
      $user['seeYourImageUrl'] = '';

      return $user;
    }

  }
