"""
一键复制管理器 - 用于无API平台的内容格式化
"""
import pyperclip
from typing import Dict, Any, Optional
import re


class CopyManager:
    """一键复制管理器"""
    
    def __init__(self):
        self.templates = self._init_templates()
    
    def _init_templates(self) -> Dict[str, Dict[str, Any]]:
        """初始化平台格式模板"""
        return {
            "头条号（资讯软文）": {
                "format": "title_content",
                "max_length": 2000,
                "supports_tags": True
            },
            "小红书（生活种草）": {
                "format": "title_content_tags",
                "max_length": 1000,
                "supports_tags": True,
                "supports_images": True
            },
            "抖音图文（短内容）": {
                "format": "title_content_tags",
                "max_length": 500,
                "supports_tags": True,
                "supports_images": True
            },
            "简书（文艺）": {
                "format": "title_content",
                "max_length": 3000,
                "supports_tags": True
            },
            "QQ空间（社交）": {
                "format": "title_content",
                "max_length": 1500,
                "supports_tags": True,
                "supports_images": True
            },
            "新浪博客（博客）": {
                "format": "title_content",
                "max_length": 3000,
                "supports_tags": True
            },
            "新浪新闻（资讯）": {
                "format": "title_content",
                "max_length": 2000,
                "supports_tags": False
            },
            "搜狐号（资讯）": {
                "format": "title_content",
                "max_length": 2500,
                "supports_tags": True
            },
            "一点号（资讯）": {
                "format": "title_content",
                "max_length": 2500,
                "supports_tags": True
            },
            "东方财富（财经）": {
                "format": "title_content",
                "max_length": 3000,
                "supports_tags": False
            },
            "邦阅网（外贸）": {
                "format": "title_content",
                "max_length": 2500,
                "supports_tags": True
            },
            "原创力文档（文档）": {
                "format": "title_content",
                "max_length": 5000,
                "supports_tags": False
            }
        }
    
    def format_for_platform(self, platform: str, content: str, title: str, 
                           keyword: str = "", brand: str = "", **kwargs) -> str:
        """
        为平台格式化内容
        
        Args:
            platform: 平台名称
            content: 原始内容
            title: 标题
            keyword: 关键词
            brand: 品牌
            **kwargs: 其他参数（标签、摘要等）
        
        Returns:
            格式化后的内容
        """
        template_config = self.templates.get(platform, {})
        format_type = template_config.get("format", "title_content")
        max_length = template_config.get("max_length", 2000)
        
        # 提取标题（如果内容中包含标题）
        if not title and content:
            # 尝试从内容第一行提取标题
            first_line = content.split('\n')[0].strip()
            if len(first_line) < 100 and not first_line.startswith('#'):
                title = first_line
            else:
                title = keyword or "文章标题"
        
        # 清理内容
        formatted_content = self._clean_content(content, platform)
        
        # 截断内容（如果需要）
        if max_length and len(formatted_content) > max_length:
            formatted_content = formatted_content[:max_length] + "..."
        
        # 根据格式类型格式化
        if format_type == "title_content":
            return f"{title}\n\n{formatted_content}"
        elif format_type == "title_content_tags":
            tags = kwargs.get('tags', [])
            tags_str = " ".join([f"#{tag}" for tag in tags[:10]]) if tags else ""
            return f"{title}\n\n{formatted_content}\n\n{tags_str}"
        else:
            return f"{title}\n\n{formatted_content}"
    
    def _clean_content(self, content: str, platform: str) -> str:
        """清理内容，移除平台不支持的格式"""
        # 移除Markdown图片语法，保留描述
        content = re.sub(r'!\[([^\]]*)\]\([^\)]+\)', r'【配图：\1】', content)
        
        # 移除Markdown链接，保留文本
        content = re.sub(r'\[([^\]]+)\]\([^\)]+\)', r'\1', content)
        
        # 移除Markdown代码块标记，保留内容
        content = re.sub(r'```[\w]*\n', '', content)
        content = re.sub(r'```', '', content)
        
        # 移除Markdown标题标记
        content = re.sub(r'^#+\s+', '', content, flags=re.MULTILINE)
        
        # 移除Markdown加粗/斜体
        content = re.sub(r'\*\*([^\*]+)\*\*', r'\1', content)
        content = re.sub(r'\*([^\*]+)\*', r'\1', content)
        content = re.sub(r'__([^_]+)__', r'\1', content)
        content = re.sub(r'_([^_]+)_', r'\1', content)
        
        return content.strip()
    
    def copy_to_clipboard(self, text: str) -> bool:
        """复制到剪贴板"""
        try:
            pyperclip.copy(text)
            return True
        except Exception as e:
            import logging
            logging.error(f"复制失败: {e}")
            return False
    
    def generate_publish_guide(self, platform: str) -> str:
        """生成发布指南"""
        guides = {
            "头条号（资讯软文）": """
📝 发布步骤：
1. 登录头条号后台（https://mp.toutiao.com/）
2. 点击"发布" → "文章"
3. 粘贴标题和内容
4. 添加封面图和标签
5. 选择分类和频道
6. 点击"发布"

💡 提示：
- 标题要吸引人，控制在30字以内
- 内容建议800-2000字
- 配图建议3-5张
            """,
            "小红书（生活种草）": """
📝 发布步骤：
1. 打开小红书APP
2. 点击"+"号发布
3. 选择"图文"
4. 粘贴标题和内容
5. 添加图片（建议3-9张）
6. 添加标签和话题
7. 选择位置（可选）
8. 发布

💡 提示：
- 标题要吸引人，控制在20字以内
- 内容建议500-1000字
- 图片要清晰美观
- 标签要相关且热门
            """,
            "抖音图文（短内容）": """
📝 发布步骤：
1. 打开抖音APP
2. 点击"+"号发布
3. 选择"图文"
4. 粘贴标题和内容
5. 添加图片（建议3-9张）
6. 添加话题标签
7. 选择位置（可选）
8. 发布

💡 提示：
- 标题要吸引人，控制在30字以内
- 内容建议200-500字
- 图片要清晰美观
- 话题要热门
            """,
            "简书（文艺）": """
📝 发布步骤：
1. 登录简书（https://www.jianshu.com/）
2. 点击"写文章"
3. 粘贴标题和内容
4. 添加标签
5. 选择专题（可选）
6. 点击"发布"

💡 提示：
- 标题要有文艺范
- 内容建议1500-3000字
- 标签要相关
            """,
            "QQ空间（社交）": """
📝 发布步骤：
1. 打开QQ空间
2. 点击"说说"或"日志"
3. 粘贴标题和内容
4. 添加图片（可选）
5. 选择可见范围
6. 发布

💡 提示：
- 内容要轻松活泼
- 建议500-1500字
- 配图要生活化
            """,
            "新浪博客（博客）": """
📝 发布步骤：
1. 登录新浪博客（https://blog.sina.com.cn/）
2. 点击"发博文"
3. 粘贴标题和内容
4. 添加标签
5. 选择分类
6. 点击"发布"

💡 提示：
- 内容要有深度
- 建议1500-3000字
- 配图要相关
            """,
            "新浪新闻（资讯）": """
📝 发布步骤：
1. 登录新浪新闻后台
2. 点击"发布文章"
3. 粘贴标题和内容
4. 添加配图
5. 选择分类
6. 提交审核

💡 提示：
- 内容要客观专业
- 建议800-2000字
- 配图要清晰
            """,
            "搜狐号（资讯）": """
📝 发布步骤：
1. 登录搜狐号（https://mp.sohu.com/）
2. 点击"发布" → "文章"
3. 粘贴标题和内容
4. 添加封面图和标签
5. 选择分类
6. 点击"发布"

💡 提示：
- 内容要专业
- 建议1000-2500字
- 配图要相关
            """,
            "一点号（资讯）": """
📝 发布步骤：
1. 登录一点号后台
2. 点击"发布文章"
3. 粘贴标题和内容
4. 添加配图和标签
5. 选择分类
6. 提交审核

💡 提示：
- 内容要有深度
- 建议1000-2500字
            """,
            "东方财富（财经）": """
📝 发布步骤：
1. 登录东方财富后台
2. 点击"发布文章"
3. 粘贴标题和内容
4. 添加配图
5. 选择财经分类
6. 提交审核

💡 提示：
- 内容要专业准确
- 建议1500-3000字
- 数据要准确
            """,
            "邦阅网（外贸）": """
📝 发布步骤：
1. 登录邦阅网后台
2. 点击"发布文章"
3. 粘贴标题和内容
4. 添加标签
5. 选择外贸分类
6. 提交审核

💡 提示：
- 内容要专业实用
- 建议1000-2500字
            """,
            "原创力文档（文档）": """
📝 发布步骤：
1. 登录原创力文档（https://www.doc88.com/）
2. 点击"上传文档"
3. 选择"新建文档"
4. 粘贴标题和内容
5. 设置文档属性
6. 提交审核

💡 提示：
- 内容要结构化
- 建议2000-5000字
- 格式要规范
            """
        }
        return guides.get(platform, "请参考平台官方发布指南")
