public function insert(Event $event, array $optionParams = null)
 {
     try {
         $event->getEventMeta();
     } catch (Exception $e) {
         throw new Exception("Don't exists eventMeta data");
     }
     $attendees = null;
     //option params filter
     if ($optionParams) {
         //attendees
         $attendeesParam = $optionParams["attendees"];
         if ($attendeesParam && is_array($attendeesParam)) {
             $attendees = [];
             foreach ($attendeesParam as $attendee) {
                 if (is_string($attendee) && filter_var($attendee, FILTER_VALIDATE_EMAIL)) {
                     if ($attendee !== $event->getUserId()) {
                         $attendees[] = ["email" => $attendee];
                     }
                 } else {
                     throw new Exception("attendees values should be a string whit valid email value");
                 }
             }
         }
     }
     $eventMeta = $event->getEventMeta();
     //verify google access
     $myGoogleClient = get_my_google_client($event->getUserId());
     if ($myGoogleClient) {
         //if exists Google access exits when record a GoogleCalendarEvent
         $dateStart = new DateTime($eventMeta->getDateStart());
         $dateStart->add(new DateInterval("P{$eventMeta->getIntervalValue()}D"));
         $dateEnd = $dateStart->format("Y-m-d");
         $googleCalendarEvent = new Google_Service_Calendar_Event(array("summary" => $event->getTitle(), "location" => $event->getLocation(), "description" => $event->getDescription(), "start" => array("dateTime" => "{$eventMeta->getDateStart()}T{$event->getStartHour()}", "timeZone" => "America/Lima"), "end" => array("dateTime" => "{$dateEnd}T{$event->getFinalHour()}", "timeZone" => "America/Lima"), "recurrence" => array("RRULE:FREQ=DAILY;COUNT=1"), "attendees" => $attendees ? $attendees : null, "reminders" => array("useDefault" => FALSE, "overrides" => array(array("method" => "email", "minutes" => 24 * 60), array("method" => "popup", "minutes" => 10)))));
         $client = $myGoogleClient->client;
         $service = new Google_Service_Calendar($client);
         $calendarId = 'primary';
         $googleCalendarEventInserted = $service->events->insert($calendarId, $googleCalendarEvent, ["sendNotifications" => true]);
         $event->setGoogleCalendarEventId($googleCalendarEventInserted->id);
     }
     //record the event
     $eventDataToInsert = ["title" => $event->getTitle(), "description" => $event->getDescription(), "type" => $event->getType(), "location" => $event->getLocation(), "start_hour" => $event->getStartHour(), "final_hour" => $event->getFinalHour(), "color" => $event->getColor(), "status" => $event->getStatus(), "date_create" => $event->getDateCreate(), "user_id" => $event->getUserId(), "google_calendar_event_id" => $event->getGoogleCalendarEventId(), "notify_status" => $event->getNotifyStatus(), "parent_event_id" => $event->getParentEventId(), "calendar_id" => $event->getCalendarId()];
     $eventDataInserted = insert("event", $eventDataToInsert);
     $event->setEventId($eventDataInserted["lastInsertId"]);
     //record the eventMeta
     $eventMeta->setEventId($event->getEventId());
     $eventMetaDataToInsert = ["event_id" => $eventMeta->getEventId(), "date_start" => $eventMeta->getDateStart(), "interval_case" => $eventMeta->getIntervalCase(), "interval_value" => $eventMeta->getIntervalValue(), "week" => $eventMeta->getWeek(), "week_day" => $eventMeta->getWeekDay()];
     $eventMetaDataInserted = insert("event_meta", $eventMetaDataToInsert);
     $eventMeta->setEventMetaId($eventMetaDataInserted["lastInsertId"]);
     //verify attendees
     if ($attendees) {
         $eventDataToInsert["google_calendar_event_id"] = null;
         $eventDataToInsert["notify_status"] = "pending";
         $eventDataToInsert["parent_event_id"] = $event->getEventId();
         foreach ($attendees as $attendee) {
             $eventDataToInsert["user_id"] = $attendee["email"];
             $eventDataInsertedOfAttendee = insert("event", $eventDataToInsert);
             $eventMetaDataToInsert["event_id"] = $eventDataInsertedOfAttendee["lastInsertId"];
             insert("event_meta", $eventMetaDataToInsert);
         }
     }
     return $event;
 }