"""
Ch14 配套代码 1 / 7 —— 活动初始化（库存预热）
================================================================

用途：
  把 MySQL 的秒杀商品库存「灌」到 Redis，活动开始前必跑。
  本脚本会同时清空上一次留下的「已购用户集合」与「订单 Stream」。

运行：
  python 01_init_stock.py            # 默认 item_id=1001 / stock=1000
  python 01_init_stock.py 1001 100   # 商品 1001 设 100 件
"""

import sys
import redis

ITEM_ID = int(sys.argv[1]) if len(sys.argv) > 1 else 1001
STOCK   = int(sys.argv[2]) if len(sys.argv) > 2 else 1000

STOCK_KEY  = f"seckill:stock:{ITEM_ID}"
USERS_KEY  = f"seckill:users:{ITEM_ID}"
ITEM_KEY   = f"seckill:item:{ITEM_ID}"
STREAM_KEY = "seckill:orders"


def main() -> None:
    r = redis.Redis(host="127.0.0.1", port=6379, decode_responses=True)
    r.ping()

    pipe = r.pipeline()
    pipe.delete(STOCK_KEY, USERS_KEY, ITEM_KEY)
    pipe.delete(STREAM_KEY)

    pipe.set(STOCK_KEY, STOCK)
    pipe.expire(STOCK_KEY, 7200)

    pipe.hset(ITEM_KEY, mapping={
        "name":   f"秒杀商品-{ITEM_ID}",
        "price":  1499,
        "stock":  STOCK,
        "sold":   0,
        "status": "READY",
    })
    pipe.expire(ITEM_KEY, 7200)

    pipe.execute()

    print("=" * 56)
    print(f"  ✅ 商品 {ITEM_ID} 已预热")
    print(f"     库存 Key  : {STOCK_KEY} = {r.get(STOCK_KEY)}")
    print(f"     元信息 Key: {ITEM_KEY}  = {r.hgetall(ITEM_KEY)}")
    print(f"     用户集合  : {USERS_KEY} (已清空)")
    print(f"     订单 Stream: {STREAM_KEY} (已清空)")
    print("=" * 56)


if __name__ == "__main__":
    try:
        main()
    except redis.ConnectionError as e:
        print(f"❌ Redis 连接失败: {e}")
        sys.exit(1)
