<?php
// +----------------------------------------------------------------------
// | 骑行打卡活动
// +----------------------------------------------------------------------
// | Author: 赖清涛 <laiqingtao@chinacpt.com>
// +----------------------------------------------------------------------
declare (strict_types=1);

namespace app\common\model;

use cores\BaseModel;
use think\model\relation\HasMany;

/**
 * 模型类：骑行打卡活动
 * Class SignAddress
 * @package app\common\model
 */
class SignAction extends BaseModel
{
    // 定义表名
    protected $name = 'sign_action';

    // 定义主键
    protected $pk = 'id';

    public function getStartTimeAttr($value)
    {
        return $this->formatSignDateTime($value);
    }

    public function getEndTimeAttr($value)
    {
        return $this->formatSignDateTime($value);
    }

    private function formatSignDateTime($value)
    {
        if (!is_string($value)
            || !preg_match('/^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})\.0{1,6}$/D', $value, $parts)
            || !checkdate((int)$parts[2], (int)$parts[3], (int)$parts[1])
            || (int)$parts[4] > 23 || (int)$parts[5] > 59 || (int)$parts[6] > 59
            || !($this->db()->getConnection() instanceof \app\common\database\Dm)) {
            return $value;
        }
        return substr($value, 0, 19);
    }

    /**
     * 活动详情
     * @param int $siginId 活动ID
     * @param array $with
     * @return static|array|null
     */
    public static function detail(int $siginId, array $with = [])
    {
        return self::get($siginId, $with);
    }

    /**
     * 删除记录 (软删除)
     * @return bool
     */
    public function setDelete(): bool
    {
        return $this->save(['is_delete' => 1]) !== false;
    }

    /**
     * 关联活动表
     * @return HasMany
     */
    public function addressList(): HasMany
    {
        return $this->hasMany("SignAddress", 'action_id')->where(['is_delete' => 0]);
    }
}
