#!/usr/bin/env python3
"""激活码生成器"""
import json, random, string, sys, os

CODES_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'codes.json')

def gen_code():
    """生成8位激活码"""
    chars = string.ascii_uppercase + string.digits
    return 'XJZ-' + ''.join(random.choices(chars, k=4)) + '-' + ''.join(random.choices(chars, k=4))

def load_codes():
    try:
        with open(CODES_FILE, 'r') as f:
            return json.load(f)
    except:
        return {}

def save_codes(codes):
    with open(CODES_FILE, 'w') as f:
        json.dump(codes, f, indent=2, ensure_ascii=False)

if __name__ == '__main__':
    cmd = sys.argv[1] if len(sys.argv) > 1 else 'gen'
    
    if cmd == 'gen':
        # gen [数量] [次数] [mode] — 如: gen 5 20 basic / gen 3 10 premium
        n = int(sys.argv[2]) if len(sys.argv) > 2 else 1
        times = int(sys.argv[3]) if len(sys.argv) > 3 else 1
        mode = sys.argv[4] if len(sys.argv) > 4 else 'basic'
        price_map = {1: '0.5U', 5: '2U', 20: '9.9U', 45: '19.9U', 100: '39.9U'}
        codes = load_codes()
        new_codes = []
        for _ in range(n):
            code = gen_code()
            codes[code] = {'times': times, 'mode': mode, 'used': False, 'created': __import__('time').strftime('%Y-%m-%d')}
            new_codes.append(code)
        save_codes(codes)
        price = price_map.get(times, f'{times*0.5}U')
        print(f'生成 {n} 个{times}次包激活码（售价{price}）：')
        for c in new_codes:
            print(f'  {c}')
    
    elif cmd == 'monthly':
        # monthly [数量] — 生成月卡激活码（39U）
        n = int(sys.argv[2]) if len(sys.argv) > 2 else 1
        codes = load_codes()
        new_codes = []
        for _ in range(n):
            code = gen_code()
            codes[code] = {'type': 'monthly', 'mode': 'basic', 'times': 0, 'used': False, 'created': __import__('time').strftime('%Y-%m-%d')}
            new_codes.append(code)
        save_codes(codes)
        print(f'生成 {n} 个月卡激活码（39U/月）：')
        for c in new_codes:
            print(f'  {c}')
    
    elif cmd == 'quarterly':
        # quarterly [数量] — 生成季卡激活码（49.9U）
        n = int(sys.argv[2]) if len(sys.argv) > 2 else 1
        codes = load_codes()
        new_codes = []
        for _ in range(n):
            code = gen_code()
            codes[code] = {'type': 'quarterly', 'mode': 'basic', 'times': 0, 'used': False, 'created': __import__('time').strftime('%Y-%m-%d')}
            new_codes.append(code)
        save_codes(codes)
        print(f'生成 {n} 个季卡激活码（49.9U/季）：')
        for c in new_codes:
            print(f'  {c}')
    
    elif cmd == 'yearly':
        # yearly [数量] — 生成年卡激活码（299U）
        n = int(sys.argv[2]) if len(sys.argv) > 2 else 1
        codes = load_codes()
        new_codes = []
        for _ in range(n):
            code = gen_code()
            codes[code] = {'type': 'yearly', 'mode': 'basic', 'times': 0, 'used': False, 'created': __import__('time').strftime('%Y-%m-%d')}
            new_codes.append(code)
        save_codes(codes)
        print(f'生成 {n} 个年卡激活码（299U/年）：')
        for c in new_codes:
            print(f'  {c}')
    
    elif cmd == 'list':
        codes = load_codes()
        used = sum(1 for c in codes.values() if c.get('used'))
        print(f'总计 {len(codes)} 个激活码，已用 {used}，剩余 {len(codes)-used}')
        for code, info in codes.items():
            status = '✅ 已用' if info.get('used') else '🔑 可用'
            ctype = info.get('type', 'times')
            label = {'monthly': '月卡19.9U', 'quarterly': '季卡49.9U', 'yearly': '年卡189.9U'}.get(ctype, f"{info.get('times',0)}次{info.get('mode','basic')}")
            print(f'  {code} [{label}] {status}')
