/**
  * Create the event
  * @param  string $id ID of the event if doing an update
  * @return view     View with session message
  */
 public function doCreate($id = null)
 {
     // Set defailt meta
     $data['meta'] = [];
     $data = Request::all();
     \Input::flash();
     // Instantiate the APIHelper
     $api = new \App\Helpers\ApiHelper();
     $userEmail = ['email' => \Auth::user()->email];
     if (isset($data['billing'])) {
         $data['billing'] = array_merge($data['billing'], $userEmail);
     }
     if (!isset($data['isIndoor'])) {
         $data['isIndoor'] = '0';
     }
     if (!isset($data['isOutdoor'])) {
         $data['isOutdoor'] = '0';
     }
     if (!isset($data['isAge0'])) {
         $data['isAge0'] = '0';
     }
     if (!isset($data['isAge13'])) {
         $data['isAge13'] = '0';
     }
     if (!isset($data['isAge16'])) {
         $data['isAge16'] = '0';
     }
     if (!isset($data['isAge18'])) {
         $data['isAge18'] = '0';
     }
     if (!isset($data['isAge21'])) {
         $data['isAge21'] = '0';
     }
     if (!isset($data['startMeridian'])) {
         $data['startMeridian'] = null;
     }
     if (!isset($data['endMeridian'])) {
         $data['endMeridian'] = null;
     }
     if (!isset($data['endFinalMeridian'])) {
         $data['endFinalMeridian'] = null;
     }
     // Checks if user has selected to choose an end date for recurring
     if (isset($data['finalDateSet'])) {
         // Final time for recurring event
         $finalEndTime = $data['endFinalTime'] . $data['endFinalMeridian'];
         // End in recurring refers to the overall end date of an event with recurring schedule
         $recurring = ['repeats' => isset($data['repeats']) ? $data['repeats'] : null, 'every' => isset($data['repeatEvery']) ? $data['repeatEvery'] : 0, 'end' => ['date' => date('Y-m-d', strtotime($data['endFinalDate'])), 'time' => date('H:i:00', strtotime($finalEndTime))], 'repeatsBy' => isset($data['repeatsBy']) ? $data['repeatsBy'] : null, 'weekdays' => isset($data['weekdays']) ? $data['weekdays'] : null];
     } else {
         $recurring = ['repeats' => isset($data['repeats']) ? $data['repeats'] : null, 'every' => isset($data['repeatEvery']) ? $data['repeatEvery'] : 0, 'end' => null, 'repeatsBy' => isset($data['repeatsBy']) ? $data['repeatsBy'] : null, 'weekdays' => isset($data['weekdays']) ? $data['weekdays'] : null];
     }
     $start = $data['startTime'] . $data['startMeridian'];
     $end = $data['endTime'] . $data['endMeridian'];
     if (isset($data['billing'])) {
         $data['meta'] = array_merge($data['billing'], isset($data['meta']) ? $data['meta'] : []);
     }
     $data['meta'] = json_encode(['schedules' => [['timeZoneId' => isset($data['timeZoneId']) ? $data['timeZoneId'] : '6', 'daysOfWeek' => isset($data['daysOfWeek']) ? $data['daysOfWeek'] : '', 'start' => ['date' => date('Y-m-d', strtotime($data['startDate'])), 'time' => date('H:i:00', strtotime($start))], 'end' => ['date' => date('Y-m-d', strtotime($data['endDate'])), 'time' => date('H:i:00', strtotime($end))], 'repeat' => isset($data['recurring']) ? $recurring : null]], 'tickets' => ['ticketNme' => isset($data['meta']['tickets']['ticketNme']) ? $data['meta']['tickets']['ticketNme'] : null, 'ticket_pric' => isset($data['meta']['ticketPric']) ? $data['meta']['ticketPric'] : 0, 'enabled' => isset($data['meta']['tickets']['enabled']) ? (bool) $data['meta']['tickets']['enabled'] : true], 'comments' => ['enabled' => isset($data['meta']['comments']['enabled']) ? (bool) $data['meta']['comments']['enabled'] : true], 'map' => ['enabled' => isset($data['meta']['map']['enabled']) ? (bool) $data['meta']['map']['enabled'] : true], 'transportation' => ['enabled' => isset($data['meta']['transportation']['enabled']) ? (bool) $data['meta']['transportation']['enabled'] : true], 'reviews' => ['enabled' => isset($data['meta']['reviews']['enabled']) ? (bool) $data['meta']['reviews']['enabled'] : true], 'rsvp' => ['enabled' => isset($data['meta']['rsvp']['enabled']) ? (bool) $data['meta']['rsvp']['enabled'] : true], 'guest_list' => ['enabled' => isset($data['meta']['guestList']['enabled']) ? (bool) $data['meta']['guestList']['enabled'] : true], 'guest_pictures' => ['enabled' => isset($data['meta']['guestPictures']['enabled']) ? (bool) $data['meta']['guestPictures']['enabled'] : true], 'guest_video' => ['enabled' => isset($data['meta']['guestVideo']['enabled']) ? (bool) $data['meta']['guestVideo']['enabled'] : true], 'tos_acceptance' => ['date' => isset($data['meta']['tos_acceptance']['date']) ? $data['meta']['tos_acceptance']['date'] : null, 'ip' => isset($data['meta']['tos_acceptance']['ip']) ? $data['meta']['tos_acceptance']['ip'] : null]]);
     if ($id !== null) {
         $data['user_id'] = \Auth::user()->id;
         // Show event associated the ID.
         $event = $api->update('events', $id . '?auth_user_id=' . $data['user_id'], $data);
     } else {
         $data['user_id'] = \Auth::user()->id;
         // Store Event
         $event = $api->store('events?auth_user_id=' . $data['user_id'], $data);
         if ($event['success'] !== true) {
             // Check if errors are in an array
             if (is_array($event['error'])) {
                 // Iterate through each error
                 foreach ($event['error'] as $error => $message) {
                     for ($i = 0; $i < count($event['error']); $i++) {
                         if (isset($message[$i])) {
                             $errorMessage[] = $message[$i];
                         }
                     }
                 }
                 // Implode error
                 $errorMessage = implode(' ', $errorMessage);
             } else {
                 $errorMessage = $event['error'];
             }
             return Redirect::to(route('events.create', ['id' => null, 'tab' => 'summary']))->with('fail_message', $errorMessage);
         }
     }
     // TODO: Duplicate charging!! Charge is being handled on the API pm first event create
     // if (isset($data['cardId']) || (isset($data['billing']['number']) && ! empty($data['billing']['number']))) {
     //   // If is premium or a card is saved
     //   if (isset($data['cardId'])) {
     //     // Preimum data with remembered card
     //     $premiumCharge = [
     //       'userId' => \Auth::user()->id,
     //       'email' => \Auth::user()->email,
     //       'cardId' => isset($data['cardId']) ? $data['cardId'] : null,
     //       'token' => isset($data['token']) ? $data['token'] : null,
     //       'eventId' => isset($event['data']['event']['id']) ? $event['data']['event']['id'] : null
     //     ];
     //   } else {
     //     // Preimum data with card
     //     $premiumCharge = [
     //       'userId' => \Auth::user()->id,
     //       'email' => isset($data['billing']['email']) ? $data['billing']['email'] : null,
     //       'name' => isset($data['billing']['name']) ? $data['billing']['name'] : null,
     //       'number' => isset($data['billing']['number']) ? $data['billing']['number'] : null,
     //       'cvc' => isset($data['billing']['cvc']) ? $data['billing']['cvc'] : null,
     //       'month' => isset($data['billing']['month']) ? $data['billing']['month'] : null,
     //       'year' => isset($data['billing']['year']) ? $data['billing']['year'] : null,
     //       'address' => isset($data['billing']['address']) ? $data['billing']['address'] : null,
     //       'city' => isset($data['billing']['city']) ? $data['billing']['city'] : null,
     //       'state' => isset($data['billing']['state']) ? $data['billing']['state'] : null,
     //       'zip' => isset($data['billing']['zip']) ? $data['billing']['zip'] : null,
     //       'eventId' => isset($event['data']['event']['id']) ? $event['data']['event']['id'] : null
     //     ];
     //   }
     //   // Unset null
     //   foreach ($premiumCharge as $key => $value) {
     //     if (is_null($value)) {
     //       unset($premiumCharge[$key]);
     //     }
     //   }
     //   // Create the users account and charge premium
     //   $customerCreate = $api->store('ticketsorders/purchase', $premiumCharge);
     //   if ($customerCreate['success'] !== true) {
     //     // Check if errors are in an array
     //     if (is_array($customerCreate['error'])) {
     //       // Iterate through each error
     //       foreach ($customerCreate['error'] as $error => $message) {
     //         for ($i=0; $i < count($customerCreate['error']); $i++) {
     //           if (isset($message[$i])) {
     //             $errorMessage[] = $message[$i];
     //           }
     //         }
     //       }
     //       $errorMessage = implode(' ', $errorMessage);
     //     } else {
     //       $errorMessage = $customerCreate['error'];
     //     }
     //     return Redirect::to(route('events.create', ['id' => null, 'tab' => 'freemium']))->with('fail_message', $errorMessage);
     //   }
     // }
     if ($event['success'] !== true) {
         // Check if errors are in an array
         if (is_array($event['error'])) {
             // Iterate through each error
             foreach ($event['error'] as $error => $message) {
                 for ($i = 0; $i < count($event['error']); $i++) {
                     if (isset($message[$i])) {
                         $errorMessage[] = $message[$i];
                     }
                 }
             }
             $errorMessage = implode(' ', $errorMessage);
         } else {
             $errorMessage = $event['error'];
         }
         return Redirect::to(route('events.create', ['id' => null, 'tab' => 'summary']))->with('fail_message', $errorMessage);
     }
     $id = $event['data']['event']['slug'];
     // Return false
     if ($event['success'] !== true) {
         return Redirect::back()->with('fail_message', 'Error occurred. Please try again later.');
     }
     // If id is nulled
     if ($id !== null) {
         // Encodes message to get sent with url
         $message = urlencode('Please wait while your event is being created');
         // Will redirect to loader with message, then load event
         $url = "time=4000&url=/events/" . $id . "&message=" . $message;
         return Redirect::to(route('pages.loader', (string) $url));
     } else {
         // Update event
         return Redirect::to(route('events.show', ['id' => $id]))->with('success_message', 'Your event is successfully updated!');
     }
 }
 /**
  * Allow the user to add/update their profile picture
  * @return [type] [description]
  */
 public function updateProfilePhoto()
 {
     $user = Auth::user();
     // Initiate API helper
     $api = new \App\Helpers\ApiHelper();
     // Save updated details to the API
     $user = $api->update('users', $user->id . '?auth_user_id=' . \Auth::user()->id, []);
     if ($user['success'] === true) {
         \Session::flash('success_message', 'Profile pic updated successfully.');
     }
     return $user;
 }