/home/ivoiecob/email.hirewise-va.com/modules/MailScheduledMessages/Manager.php
<?php
/**
 * This code is licensed under AGPLv3 license or Afterlogic Software License
 * if commercial version of the product was purchased.
 * For full statements of the licenses see LICENSE-AFTERLOGIC and LICENSE-AGPL3 files.
 */

namespace Aurora\Modules\MailScheduledMessages;

/**
 * @license https://www.gnu.org/licenses/agpl-3.0.html AGPL-3.0
 * @license https://afterlogic.com/products/common-licensing Afterlogic Software License
 * @copyright Copyright (c) 2023, Afterlogic Corp.
 *
 * @property Module $oModule
 */
class Manager extends \Aurora\System\Managers\AbstractManager
{
    public function __construct(\Aurora\System\Module\AbstractModule $oModule = null)
    {
        parent::__construct($oModule);
    }

    /**
     * @return array|bool
     */
    public function getMessagesForSend($iTimestamp)
    {
        return Models\Message::where('schedule_timestamp', '<', $iTimestamp)
             ->orderBy('schedule_timestamp')
             ->get()
             ->map(function ($message) {
                 return [
                     'AccountId' => (int) $message->account_id,
                     'FolderFullName' => $message->folder_full_name,
                     'MessageUid' => $message->message_uid,
                     'ScheduleTimestamp' => (int) $message->schedule_timestamp
                 ];
             });
    }

    /**
     * @param int $iAccountID
     * @param string $sFolderFullName
     * @param string $sMessageUid
     * @param int $iTimestamp
     *
     * @return bool
     */
    public function addMessage($iAccountID, $sFolderFullName, $sMessageUid, $iTimestamp)
    {
        return Models\Message::query()->create([
            'account_id' => $iAccountID,
            'folder_full_name' => $sFolderFullName,
            'message_uid' => $sMessageUid,
            'schedule_timestamp' => $iTimestamp
        ]);
    }

    public function updateMessageScheduleTimestamp($iAccountID, $sFolderFullName, $sMessageUid, $iTimestamp)
    {
        return Models\Message::where('account_id', $iAccountID)
            ->where('folder_full_name', $sFolderFullName)
            ->where('message_uid', $sMessageUid)
            ->update(['schedule_timestamp' => $iTimestamp]);
    }

    public function getMessage($iAccountID, $sFolderFullName, $sMessageUid)
    {
        $mResult = false;

        $message = Models\Message::where('account_id', $iAccountID)
            ->where('folder_full_name', $sFolderFullName)
            ->where('message_uid', $sMessageUid)
            ->first();
        if ($message) {
            $mResult = [
                'AccountId' => (int) $message->account_id,
                'FolderFullName' => $message->folder_full_name,
                'MessageUid' => $message->message_uid,
                'ScheduleTimestamp' => (int) $message->schedule_timestamp
            ];
        }
        return $mResult;
    }

    public function removeMessage($iAccountID, $sFolderFullName, $sMessageUid)
    {
        return Models\Message::where('account_id', $iAccountID)
            ->where('folder_full_name', $sFolderFullName)
            ->where('message_uid', $sMessageUid)
            ->delete();
    }

    public function removeAccountMessages($iAccountID)
    {
        return Models\Message::where('account_id', $iAccountID)->delete();
    }
}