/**
  * Store a newly created resource in storage.
  *
  * @return Response
  */
 public function store()
 {
     // VALIDATORS
     // Validate type
     $rules = array('type' => array('required', 'in:project,map'));
     $messages = array('type.required' => 'NO_TYPE');
     $validator = \Validator::make(\Input::all(), $rules, $messages);
     if ($validator->fails()) {
         return response()->json(array('error' => true, 'validator' => $validator->messages()), 500);
     }
     // TODO: Validate project_id + email
     // Validate email + duplicate
     if (\Input::get('type') == 'project') {
         $confirm_token = md5(\Input::get('project_id') . \Input::get('email'));
     } else {
         $confirm_token = md5(\Input::get('bounds') . \Input::get('email'));
     }
     $data = \Input::all();
     $data = array_add($data, 'confirm_token', $confirm_token);
     $rules = array('email' => array('required', 'email'), 'confirm_token' => 'unique:subscriptions');
     $messages = array('email.required' => 'NO_EMAIL', 'email.email' => 'NOT_EMAIL', 'confirm_token.unique' => 'DUPLICATE');
     $validator = \Validator::make($data, $rules, $messages);
     if ($validator->fails()) {
         return response()->json(array('error' => true, 'validator' => $validator->messages()), 500);
     }
     // Validate bounds
     if (\Input::get('type') == 'map') {
         $bounds = explode(",", \Input::get('bounds'));
         if (count($bounds) != 4 || !\Input::has('bounds')) {
             return response()->json(array('error' => true, 'validator' => 'BOUNDS_ERROR'), 500);
         }
     }
     // SUBSCRIBE
     User::firstOrCreate(array('email' => \Input::get('email')));
     $user = User::where('email', \Input::get('email'))->first();
     $subscription = new Subscription();
     $subscription->user_id = $user->id;
     $subscription->confirm_token = $confirm_token;
     $subscription->geojson = \Input::get('geojson');
     if (\Input::get('type') == 'project') {
         $subscription->project_id = \Input::get('project_id');
     } elseif (\Input::get('type') == 'map') {
         $subscription->sw_lat = $bounds[0];
         $subscription->sw_lng = $bounds[1];
         $subscription->ne_lat = $bounds[2];
         $subscription->ne_lng = $bounds[3];
         $subscription->bounds = \Input::get('bounds');
         $subscription->center = \Input::get('center');
         $subscription->zoom = \Input::get('zoom');
     }
     $subscription->save();
     $user->increment('subscriptions');
     return response()->json(array('error' => false, 'subscription' => $subscription->toArray(), 'status' => 'OK'), 200);
 }