public function fetchMessagesInbox($uid, $messageId = null)
 {
     $select = new Select($this->table);
     $select->columns(['message_id' => 'response_to', 'thread_length' => new Expression('COUNT(`directus_messages`.`id`)')])->join('directus_messages_recipients', 'directus_messages_recipients.message_id = directus_messages.id', ['id', 'message_id', 'recipient', 'read', 'group']);
     $select->where->equalTo('recipient', $uid);
     if (!empty($messageId)) {
         if (gettype($messageId) == 'array') {
             $select->where->in('response_to', $messageId)->or->in('directus_messages.id', $messageId);
         } else {
             $select->where->nest->equalTo('response_to', $messageId)->or->equalTo('directus_messages.id', $messageId)->unnest;
         }
     }
     $select->group(['directus_messages_recipients.id', 'directus_messages_recipients.message_id', 'directus_messages_recipients.recipient', 'directus_messages_recipients.read', 'directus_messages_recipients.group', 'response_to', 'directus_messages.id'])->order('directus_messages.id DESC');
     $result = $this->selectWith($select)->toArray();
     $messageIds = [];
     foreach ($result as $message) {
         $messageIds[] = $message['message_id'];
     }
     if (sizeof($messageIds) == 0) {
         return [];
     }
     $result = $this->fetchMessageThreads($messageIds, $uid);
     if (sizeof($result) == 0) {
         return [];
     }
     $resultLookup = [];
     $ids = [];
     // Grab ids;
     foreach ($result as $item) {
         $ids[] = $item['id'];
     }
     $directusMessagesTableGateway = new DirectusMessagesRecipientsTableGateway($this->acl, $this->adapter);
     $recipients = $directusMessagesTableGateway->fetchMessageRecipients($ids);
     foreach ($result as $item) {
         $item['responses'] = ['rows' => []];
         $item['recipients'] = implode(',', $recipients[$item['id']]);
         $resultLookup[$item['id']] = $item;
     }
     foreach ($result as $item) {
         if ($item['response_to'] != NULL) {
             // Move it to resultLookup
             unset($resultLookup[$item['id']]);
             $item = $this->parseRecord($item);
             $resultLookup[$item['response_to']]['responses']['rows'][] = $item;
         }
     }
     $result = array_values($resultLookup);
     foreach ($result as &$row) {
         $row = $this->parseRecord($row);
     }
     // Add date_updated
     // Update read
     foreach ($result as &$message) {
         $responses = $message['responses']['rows'];
         /*foreach ($responses as $response) {
               if($response['read'] == "0") {
                   $message['read'] = "0";
                   break;
               }
           }*/
         $lastResponse = end($responses);
         if ($lastResponse) {
             $message['date_updated'] = $lastResponse['datetime'];
         } else {
             $message['date_updated'] = $message['datetime'];
         }
     }
     return $result;
 }