<?php

namespace XZD\AI\V5\Core;

/**
 * 统一通知限流器 — 每种通知每天最多发送 3 次
 *
 * 使用 wp_options 记录当天每类通知已发次数，跨天自动归零。
 * key 格式: xzd_notify_{type}_{date}
 */
class NotificationThrottle
{
    const MAX_PER_DAY = 3;

    /**
     * 发送通知（自动节流）
     *
     * @param string $type    通知类型标识（如 'ai_all_failed', 'write_article_failed'）
     * @param string $subject 邮件标题
     * @param string $message 邮件正文
     * @return bool 是否实际发送了通知
     */
    public static function send(string $type, string $subject, string $message): bool
    {
        $date = date('Y-m-d');
        $key = "xzd_notify_{$type}_{$date}";
        $count = (int) get_option($key, 0);

        if ($count >= self::MAX_PER_DAY) {
            return false;
        }

        $siteName = get_bloginfo('name');
        $fullSubject = "[{$siteName}] {$subject}";

        wp_mail(get_option('admin_email'), $fullSubject, $message);

        // 通过适配器发送站内通知（三层降级：ZibMsg → zib_message表 → user_meta）
        $adminIds = get_users(['role' => 'administrator', 'fields' => 'ID']);
        if (!empty($adminIds)) {
            $adapter = \XZD\AI\V5\Theme\AdapterRegistry::getCurrent();
            $adapter->sendBulkNotification($adminIds, $fullSubject, nl2br(esc_html($message)), 0);
        }

        update_option($key, $count + 1, false);
        return true;
    }
}
