<?php

/**
 * 私聊消息
 * @author solu
 */
class PersonMsg extends Model {
    protected $tableName = 'person_msg';
    protected $dbKey = 'dw_chat';

    const MAX_REPEAL_TIME = 180; // 三分钟撤销时间

    /**
     * 撤销消息
     * @author solu
     * @param $from
     * @param $session_id
     * @param $hash
     * @return bool
     * @throws Exception
     */
    public function repeal($from, $session_id, $hash) {
        $where = compact('hash', 'session_id');
        $msg = $this->objTable->getRow($where);
        if (!$msg) {
            throw new Exception('message not found', CODE_NORMAL_ERROR);
        }

        if ($msg['from'] != $from) {
            throw new Exception('no permission', CODE_NO_PERMITION);
        }

        if ((time() - strtotime($msg['create_time']) > self::MAX_REPEAL_TIME)) {
            throw new Exception('repeal message time out', CODE_NORMAL_ERROR);
        }

        $this->objTable->updateObject(['state' => 0], $where);

        ThirdApi::pushPersonEvent($msg['to'], [
            'type' => 'repeal',
            'from' => $from,
            'to' => $msg['to'],
            'hash' => $hash,
        ]);

        return true;
    }
}