public function save()
 {
     $type = (string) Input::get('type');
     if (!in_array($type, array('mismatch', 'spam', 'flood', 'rude', 'obscene'))) {
         return $this->respondWithError('Set incorrect complaint type');
     }
     $complaint = new Complaint();
     $complaint->owner_id = Auth::user()->id;
     $complaint->type = $type;
     if (Input::has('post_id')) {
         $post = Post::find((int) Input::get('post_id'));
         if (!$post) {
             return $this->respondWithError('Post isn\'t found');
         } else {
             if ($post->user_id == Auth::user()->id) {
                 return $this->respondWithError('Can\'t complain to your post');
             }
         }
         if (Complaint::where('owner_id', Auth::user()->id)->where('post_id', $post->id)->first()) {
             return $this->respondNoContent();
         }
         $complaint->post_id = $post->id;
     } else {
         if (Input::has('user_id')) {
             $user = User::find((int) Input::get('user_id'));
             if (!$user) {
                 return $this->respondWithError('User isn\'t found');
             } else {
                 if ($user->id == Auth::user()->id) {
                     return $this->respondWithError('Can\'t complain to your profile');
                 }
             }
             if (Complaint::where('owner_id', Auth::user()->id)->where('user_id', $user->id)->first()) {
                 return $this->respondNoContent();
             }
             $complaint->user_id = $user->id;
         } else {
             if (Input::has('comment_id')) {
                 $comment = Comment::find((int) Input::get('comment_id'));
                 if (!$comment) {
                     return $this->respondWithError('Comment isn\'t found');
                 } else {
                     if ($comment->user_id == Auth::user()->id) {
                         return $this->respondWithError('Can\'t complain to your comment');
                     }
                 }
                 if (Complaint::where('owner_id', Auth::user()->id)->where('comment_id', $comment->id)->first()) {
                     return $this->respondNoContent();
                 }
                 $complaint->comment_id = $comment->id;
             } elseif (Input::has('emergency_id')) {
                 $emergency = Emergency::find(Input::get('emergency_id'));
                 if (!$emergency) {
                     return $this->respondNotFound('Emergency not found');
                 }
                 if ($emergency->receiver != Auth::id()) {
                     return $this->respondInsufficientPrivileges('This emergency is not for you to complain');
                 }
                 $emergency->complained_at = Carbon::now();
                 $emergency->save();
                 $emergency->getMembersTokens()->each(function ($token) use($emergency) {
                     $state = new StateSender($token->auth_token);
                     $state->setEmergencyAsComplained($emergency->id, $emergency->complained_at);
                 });
                 return $this->respondNoContent();
             }
         }
     }
     $complaint->save();
     return $this->respondNoContent();
 }