"""企业微信集成"""
import xml.etree.ElementTree as ET
from typing import Dict, Optional, Tuple
from src.config import get_settings


class WeChatWorkClient:
    """企业微信客户端"""

    def __init__(self):
        settings = get_settings()
        self.corp_id = getattr(settings, 'WECHAT_CORP_ID', '')
        self.agent_id = getattr(settings, 'WECHAT_AGENT_ID', '')
        self.secret = getattr(settings, 'WECHAT_SECRET', '')
        self.token = getattr(settings, 'WECHAT_TOKEN', '')
        self.encoding_aes_key = getattr(settings, 'WECHAT_ENCODING_AES_KEY', '')

    def verify_url(self, signature: str, timestamp: str, nonce: str, echo_str: str) -> bool:
        """验证回调URL（企微配置时调用）"""
        # 按字典序排序并拼接
        tmp_str = ''.join(sorted([self.token, timestamp, nonce, echo_str]))
        import hashlib
        hashcode = hashlib.sha1(tmp_str.encode()).hexdigest()
        return hashcode == signature

    def parse_message(self, xml_data: str) -> Dict:
        """解析XML消息"""
        root = ET.fromstring(xml_data)
        return {
            'to_user_name': root.find('ToUserName').text if root.find('ToUserName') is not None else '',
            'from_user_name': root.find('FromUserName').text if root.find('FromUserName') is not None else '',
            'create_time': root.find('CreateTime').text if root.find('CreateTime') is not None else '',
            'msg_type': root.find('MsgType').text if root.find('MsgType') is not None else '',
            'content': root.find('Content').text if root.find('Content') is not None else '',
            'msg_id': root.find('MsgId').text if root.find('MsgId') is not None else '',
            'agent_id': root.find('AgentID').text if root.find('AgentID') is not None else '',
        }

    def build_reply(self, to_user: str, from_user: str, content: str) -> str:
        """构建回复XML"""
        import time
        xml = f"""<xml>
<ToUserName><![CDATA[{to_user}]]></ToUserName>
<FromUserName><![CDATA[{from_user}]]></FromUserName>
<CreateTime>{int(time.time())}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[{content}]]></Content>
</xml>"""
        return xml


class WeChatWorkMessageHandler:
    """企业微信消息处理器"""

    def __init__(self, client: WeChatWorkClient):
        self.client = client

    async def handle_message(self, message: Dict) -> Optional[str]:
        """处理收到的消息"""
        msg_type = message.get('msg_type', '')
        content = message.get('content', '')
        from_user = message.get('from_user_name', '')

        if msg_type == 'text':
            # 文本消息，创建任务处理
            return await self._handle_text_message(from_user, content)

        return None

    async def _handle_text_message(self, user_id: str, content: str) -> str:
        """处理文本消息"""
        # 返回确认收到，实际处理异步进行
        return f"收到消息：{content}\n正在处理中，请稍候..."
