"""
智能个性化档案 — 按收件域类型自动匹配魔改配置
================================================
主控开启"智能个性化"后, 引擎对每封邮件按收件域自动选择档案:
  - 日本运营商域 (docomo/au/softbank等) → 保守档案 (慢节奏+限速, 保护IP/域)
  - 大型免费邮箱 (Gmail/Yahoo/Outlook/iCloud) → 合规档案 (12头DKIM+合规头全开)
  - 企业自有域 (其余) → 快速档案 (移动端指纹+高速, 宽松邮局随便发)

用法:
  from smart_profile import smart_classify, SMART_PROFILES
  key = smart_classify('user@docomo.ne.jp')   # -> 'japan_carrier'
  prof = SMART_PROFILES[key]
"""

# ============================================================
# 档案定义 (disguise_opts + dkim_header_mode + 节奏 + 限速)
# ============================================================
SMART_PROFILES = {
    'japan_carrier': {
        'label': '日本运营商 (保守)',
        'dkim_header_mode': 'extended12',
        'disguise_opts': {
            'mua_pool': 'japan', 'received_mode': 'chain',
            'x_mailer': True, 'feedback_id': True, 'list_id': True,
            'x_priority': True, 'date_jitter_sec': 300,
        },
        'smtp_pace_mode': 'medium',
        'mx_rate_per_minute': 8,
        'domain_rate_per_minute': 10,
        'ip_proactive_threshold': 20,
    },
    'gmail_web': {
        'label': 'Gmail/Yahoo (合规)',
        'dkim_header_mode': 'extended12',
        'disguise_opts': {
            'mua_pool': 'all', 'received_mode': 'chain',
            'x_mailer': True, 'feedback_id': True, 'list_id': True,
            'x_priority': True, 'date_jitter_sec': 300,
        },
        'smtp_pace_mode': 'medium',
        'mx_rate_per_minute': 4,
        'domain_rate_per_minute': 20,
        'ip_proactive_threshold': 30,
    },
    'corp_mobile': {
        'label': '企业自有域 (快速)',
        'dkim_header_mode': 'core7',
        'disguise_opts': {
            'mua_pool': 'mobile', 'received_mode': 'single',
            'x_mailer': True, 'feedback_id': True, 'list_id': True,
            'x_priority': False, 'date_jitter_sec': 300,
        },
        'smtp_pace_mode': 'fast',
        'mx_rate_per_minute': 0,
        'domain_rate_per_minute': 30,
        'ip_proactive_threshold': 50,
    },
    'default_balanced': {
        'label': '通用 (平衡)',
        'dkim_header_mode': 'random_pool',
        'disguise_opts': {
            'mua_pool': 'all', 'received_mode': 'chain',
            'x_mailer': True, 'feedback_id': True, 'list_id': True,
            'x_priority': True, 'date_jitter_sec': 300,
        },
        'smtp_pace_mode': 'medium',
        'mx_rate_per_minute': 0,
        'domain_rate_per_minute': 20,
        'ip_proactive_threshold': 30,
    },
}

# ============================================================
# 域分类规则 (后缀匹配, 从上到下优先级)
# ============================================================
DOMAIN_RULES = [
    (
        'japan_carrier',
        ['docomo.ne.jp', 'mopera.net', 'dwmail.jp', 'ezweb.ne.jp', 'au.com',
         'softbank.ne.jp', 'i.softbank.jp', 'vodafone.ne.jp', 'disney.ne.jp',
         'ymobile.ne.jp', 'uqmobile.jp', 'mineo.jp', 'ocn.ne.jp', 'biglobe.ne.jp',
         'nifty.com', 'plala.or.jp', 'so-net.ne.jp', 'kddi.com', 'kcn.ne.jp',
         'bb.excite.co.jp', 'jcom.home.ne.jp', 'zaq.ne.jp', 'eo.ne.jp', 'cty-net.ne.jp'],
    ),
    (
        'gmail_web',
        ['gmail.com', 'googlemail.com', 'yahoo.co.jp', 'ymail.ne.jp', 'ybb.ne.jp',
         'yahoo.com', 'icloud.com', 'me.com', 'mac.com', 'outlook.com', 'outlook.jp',
         'hotmail.com', 'hotmail.co.jp', 'live.jp', 'live.com', 'msn.com',
         'rakuten.jp', 'infoseek.jp', 'excite.co.jp', 'goo.jp', 'livedoor.com',
         'aol.com', 'protonmail.com', 'zoho.com'],
    ),
]


def classify_domain(domain):
    """按域返回档案 key, 未命中返回 default_balanced"""
    d = (domain or '').strip().lower().rstrip('.')
    if not d:
        return 'default_balanced'
    for key, suffixes in DOMAIN_RULES:
        for suf in suffixes:
            if d == suf or d.endswith('.' + suf):
                return key
    return 'default_balanced'


def smart_classify(email):
    """按邮箱地址返回档案 key"""
    try:
        domain = email.split('@')[-1] if '@' in email else email
    except Exception:
        domain = ''
    return classify_domain(domain)


def profile_for(email, overrides=None):
    """返回 (key, profile dict)
    overrides: {分类key: 档案key} 主控自定义"某类域改用哪个档案"
    """
    key = smart_classify(email)
    pkey = key
    if isinstance(overrides, dict) and overrides.get(key):
        pkey = overrides[key]
    prof = SMART_PROFILES.get(pkey) or SMART_PROFILES['default_balanced']
    return pkey, prof
