<?php

declare(strict_types=1);

namespace Kylin\Prompt\Services;

/**
 * AI 提示语合规标注服务
 *
 * 依据《深度合成服务管理规定》第六条：
 * 深度合成服务提供者应当对使用其服务生成的信息内容进行标识。
 *
 * 依据《网络安全法》第二十二条，网络产品、服务具有收集用户信息功能的，
 * 其提供者应当向用户明示并取得同意。
 *
 * 使用方式：
 *   $marked = AIPromptCompliance::markAIGenerated($prompt);
 *   $isAI = AIPromptCompliance::isAIGenerated($prompt);
 */
final class AIPromptCompliance
{
    /**
     * AI 生成标记
     */
    public const AI_MARK = '[AI生成]';

    /**
     * 标记 AI 生成的提示语
     *
     * @param array $prompt 提示语数据
     * @return array 带 AI 标记的提示语
     */
    public static function markAIGenerated(array $prompt): array
    {
        $marked = $prompt;

        if (isset($marked['title']) && ! str_contains($marked['title'], self::AI_MARK)) {
            $marked['title'] = self::AI_MARK . ' ' . $marked['title'];
        }

        if (isset($marked['content']) && ! str_contains($marked['content'], self::AI_MARK)) {
            $marked['content'] .= "\n\n" . self::AI_MARK . ' 本提示语由 AI 生成，仅供参考。';
        }

        $marked['ai_generated'] = true;

        return $marked;
    }

    /**
     * 判断是否为 AI 生成的提示语
     */
    public static function isAIGenerated(array $prompt): bool
    {
        if (isset($prompt['ai_generated']) && $prompt['ai_generated'] === true) {
            return true;
        }

        $content = $prompt['content'] ?? '';
        $title = $prompt['title'] ?? '';

        return str_contains($content, self::AI_MARK) || str_contains($title, self::AI_MARK);
    }

    /**
     * 去除 AI 标记
     */
    public static function removeAIMark(array $prompt): array
    {
        $cleaned = $prompt;

        if (isset($cleaned['title'])) {
            $cleaned['title'] = str_replace(self::AI_MARK . ' ', '', $cleaned['title']);
        }

        if (isset($cleaned['content'])) {
            $cleaned['content'] = str_replace(
                "\n\n" . self::AI_MARK . ' 本提示语由 AI 生成，仅供参考。',
                '',
                $cleaned['content'],
            );
        }

        unset($cleaned['ai_generated']);

        return $cleaned;
    }

    /**
     * 合规声明
     */
    public static function complianceNotice(): string
    {
        return '本提示语系统遵循《深度合成服务管理规定》，AI 生成的提示语已标注 [AI生成] 标识。';
    }
}