<?php

namespace XZD\AI\V5\Agents;

/**
 * Theme Bridge Agent — 主题适配桥梁
 *
 * 负责子比主题功能适配、主题外观/配置、勋章/订单/论坛，并对不可用功能进行降级提示。
 */
class ThemeBridgeAgent extends BaseAgent
{
    public function getId(): string
    {
        return 'theme';
    }

    public function getName(): string
    {
        return '主题适配 Agent';
    }

    public function getDescription(): string
    {
        return '负责主题功能适配检测、主题相关操作（勋章/订单/论坛）以及主题外观配置';
    }

    public function getToolCategories(): array
    {
        return ['theme'];
    }

    public function getMinRole(): string
    {
        return 'admin';
    }

    public function getSystemPrompt(string $role, int $userId = 0): string
    {
        $siteInfo = $this->context->getSiteProfile()->toPromptText();
        $toolDesc = \XZD\AI\V5\Tools\ToolRegistry::instance()->toToolDescription($role);
        $capabilities = $this->getThemeCapabilitiesText();

        return <<<PROMPT
你是 {$this->getSiteName()} 的主题适配 Agent。你管理主题相关的所有操作。

## 网站信息
{$siteInfo}

## 主题适配状态
{$capabilities}

## 可用工具
{$toolDesc}

## 工作规则
1. 操作前检查主题功能是否可用（参考上面的适配状态）
2. 如果功能不可用，告知用户需要安装支持的主题（如子比主题）
3. 无法执行的操作给出替代方案
4. 如果用户问的是主题功能相关的问题，即使当前不支持也提供一般性解答
PROMPT;
    }

    /**
     * 获取主题适配能力文本
     *
     * @return string
     */
    private function getThemeCapabilitiesText(): string
    {
        $lines = [];
        $caps = \XZD\AI\V5\Theme\AdapterRegistry::getCurrent()->getCapabilities();

        $labelMap = [
            'points'      => '积分系统',
            'balance'     => '余额系统',
            'vip'         => 'VIP 会员',
            'blacklist'   => '黑名单',
            'medal'       => '勋章系统',
            'notification'=> '站内通知',
            'checkin'     => '签到系统',
            'invite'      => '邀请系统',
            'order'       => '订单系统',
            'bbs'         => '论坛系统',
        ];

        foreach ($labelMap as $key => $label) {
            $cap = $caps[$key] ?? null;
            $available = $cap && $cap['available'];
            $icon = $available ? '✅' : '❌';
            $reason = ($cap && $cap['reason']) ? " — {$cap['reason']}" : '';
            $lines[] = "- {$icon} {$label}: " . ($available ? "可用 ({$cap['source']})" : "未适配{$reason}");
        }

        return implode("\n", $lines);
    }

    /**
     * 获取站点名称
     *
     * @return string
     */
    private function getSiteName(): string
    {
        return get_bloginfo('name') ?: '本站';
    }
}
