import tkinter as tk
from tkinter import ttk, messagebox
import random
import threading
import time
from datetime import datetime

class SpendElonMoney:
    def __init__(self, root):
        self.root = root
        self.root.title("💸 花光马斯克的钱 · 败家模拟器")
        self.root.geometry("900x700")
        self.root.resizable(False, False)
        self.root.configure(bg="#0a0a0a")
        
        # 马斯克初始财富（单位：亿美元）
        self.total_wealth = 3000  # 3000亿美元
        self.remaining = self.total_wealth
        self.spent = 0
        self.total_items = 0
        
        # 消费记录
        self.purchase_history = []
        
        # 游戏状态
        self.is_spending = False
        self.spend_thread = None
        
        # 败家成就
        self.achievements = {
            "first_buy": False,
            "billionaire": False,
            "hundred_billion": False,
            "broke": False,
            "speed_buy": False
        }
        
        self.setup_ui()
        
    def setup_ui(self):
        """创建豪华败家界面"""
        # 主容器 - 暗黑奢华风格
        main_frame = tk.Frame(self.root, bg="#0a0a0a")
        main_frame.pack(fill=tk.BOTH, expand=True, padx=20, pady=20)
        
        # ===== 标题 =====
        title_frame = tk.Frame(main_frame, bg="#0a0a0a")
        title_frame.pack(fill=tk.X, pady=(0, 15))
        
        tk.Label(
            title_frame,
            text="💸 花光马斯克的钱 💸",
            font=("Arial", 28, "bold"),
            fg="#ffd700",
            bg="#0a0a0a"
        ).pack()
        
        tk.Label(
            title_frame,
            text="🏆 败家挑战：花光 3000 亿美元！",
            font=("Arial", 14),
            fg="#888",
            bg="#0a0a0a"
        ).pack()
        
        # ===== 财富显示 =====
        wealth_frame = tk.Frame(main_frame, bg="#1a1a1a", relief=tk.RAISED, bd=2)
        wealth_frame.pack(fill=tk.X, pady=10, padx=10)
        
        # 剩余金额
        self.remaining_label = tk.Label(
            wealth_frame,
            text="💰 剩余: $3000.0 亿",
            font=("Arial", 20, "bold"),
            fg="#4caf50",
            bg="#1a1a1a"
        )
        self.remaining_label.pack(side=tk.LEFT, padx=20, pady=10)
        
        # 已花费
        self.spent_label = tk.Label(
            wealth_frame,
            text="💸 已花: $0.0 亿",
            font=("Arial", 16),
            fg="#ff6b6b",
            bg="#1a1a1a"
        )
        self.spent_label.pack(side=tk.LEFT, padx=20, pady=10)
        
        # 进度条
        self.progress = ttk.Progressbar(
            wealth_frame,
            length=300,
            mode='determinate',
            maximum=self.total_wealth
        )
        self.progress.pack(side=tk.LEFT, padx=20)
        self.progress['value'] = 0
        
        # ===== 购买商品分类 =====
        category_frame = tk.Frame(main_frame, bg="#0a0a0a")
        category_frame.pack(fill=tk.X, pady=10)
        
        # 商品分类标签
        tk.Label(
            category_frame,
            text="🛒 选择败家方式:",
            font=("Arial", 14, "bold"),
            fg="#ffffff",
            bg="#0a0a0a"
        ).pack(anchor=tk.W, pady=(0, 5))
        
        # 商品按钮区域
        self.create_product_buttons(main_frame)
        
        # ===== 疯狂购物模式 =====
        auto_frame = tk.Frame(main_frame, bg="#0a0a0a")
        auto_frame.pack(pady=10)
        
        tk.Label(
            auto_frame,
            text="🤖 自动败家模式:",
            font=("Arial", 12),
            fg="#aaa",
            bg="#0a0a0a"
        ).pack(side=tk.LEFT, padx=10)
        
        self.auto_spend_btn = tk.Button(
            auto_frame,
            text="🔥 一键花光",
            font=("Arial", 12, "bold"),
            bg="#ff4444",
            fg="white",
            padx=20,
            pady=5,
            cursor="hand2",
            command=self.auto_spend,
            state=tk.DISABLED
        )
        self.auto_spend_btn.pack(side=tk.LEFT, padx=10)
        
        self.stop_btn = tk.Button(
            auto_frame,
            text="⏹ 停止",
            font=("Arial", 12, "bold"),
            bg="#666",
            fg="white",
            padx=20,
            pady=5,
            cursor="hand2",
            command=self.stop_spending,
            state=tk.DISABLED
        )
        self.stop_btn.pack(side=tk.LEFT, padx=10)
        
        # ===== 购物车/历史记录 =====
        history_frame = tk.Frame(main_frame, bg="#0a0a0a")
        history_frame.pack(fill=tk.BOTH, expand=True, pady=10)
        
        tk.Label(
            history_frame,
            text="📋 败家记录:",
            font=("Arial", 14, "bold"),
            fg="#ffffff",
            bg="#0a0a0a"
        ).pack(anchor=tk.W)
        
        # 历史列表
        history_list_frame = tk.Frame(history_frame, bg="#1a1a1a")
        history_list_frame.pack(fill=tk.BOTH, expand=True, pady=5)
        
        scrollbar = tk.Scrollbar(history_list_frame)
        scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
        
        self.history_text = tk.Text(
            history_list_frame,
            height=12,
            font=("Consolas", 10),
            bg="#1a1a1a",
            fg="#d4d4d4",
            yscrollcommand=scrollbar.set,
            state=tk.DISABLED
        )
        self.history_text.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
        scrollbar.config(command=self.history_text.yview)
        
        # ===== 成就 =====
        self.achievement_label = tk.Label(
            main_frame,
            text="🏅 成就: 无",
            font=("Arial", 11),
            fg="#ffd700",
            bg="#0a0a0a"
        )
        self.achievement_label.pack(pady=5)
        
        # ===== 底部统计 =====
        stats_frame = tk.Frame(main_frame, bg="#0a0a0a")
        stats_frame.pack(fill=tk.X, pady=5)
        
        self.stats_label = tk.Label(
            stats_frame,
            text="📊 已消费 0 件商品 | 败家进度 0.0% | 马斯克表情: 😎",
            font=("Arial", 11),
            fg="#888",
            bg="#0a0a0a"
        )
        self.stats_label.pack()
        
    def create_product_buttons(self, parent):
        """创建商品购买按钮"""
        # 商品分类：奢侈品、科技、地产、太空、杂项
        products = [
            ("🏎️ 特斯拉 Roadster", 0.5, "酷炫跑车"),
            ("🏠 洛杉矶豪宅", 2.0, "比弗利山庄"),
            ("🚀 太空旅行票", 5.0, "SpaceX 星际旅行"),
            ("🏝️ 私人岛屿", 8.0, "加勒比海岛"),
            ("🖥️ 超级计算机", 1.0, "AI 计算集群"),
            ("⚽ 英超球队", 30.0, "买支球队玩玩"),
            ("✈️ 私人飞机", 4.0, "湾流 G650"),
            ("🏛️ 城堡", 6.0, "法国古堡"),
            ("🎨 名画", 3.0, "莫奈/梵高"),
            ("🌐 小岛国", 15.0, "买个国家当国王"),
            ("🚗 限量超跑", 2.5, "兰博基尼 Veneno"),
            ("🗼 埃菲尔铁塔", 10.0, "买下地标！"),
            ("💎 钻石矿", 12.0, "整座矿山"),
            ("🤖 机器人 army", 7.0, "1000台机器人"),
            ("🍷 酒庄", 3.5, "法国红酒庄"),
            ("🏟️ 体育场", 20.0, "冠名权"),
            ("🛰️ 卫星", 25.0, "私人卫星"),
            ("🌋 火山口", 9.0, "度假胜地"),
            ("🎪 马戏团", 1.5, "全球巡演"),
            ("🚢 游轮", 18.0, "豪华邮轮"),
        ]
        
        # 创建网格按钮
        btn_frame = tk.Frame(parent, bg="#0a0a0a")
        btn_frame.pack(fill=tk.X, pady=5)
        
        # 每行4个按钮
        row = 0
        col = 0
        for name, price, desc in products:
            btn = tk.Button(
                btn_frame,
                text=f"{name}\n${price}亿",
                font=("Arial", 9),
                bg="#2a2a2a",
                fg="#ffffff",
                relief=tk.RAISED,
                bd=2,
                padx=8,
                pady=5,
                cursor="hand2",
                command=lambda n=name, p=price, d=desc: self.buy_item(n, p, d)
            )
            btn.grid(row=row, column=col, padx=3, pady=3, sticky="nsew")
            
            # 鼠标悬停效果
            def on_enter(e, btn=btn):
                btn.config(bg="#3a3a3a")
            def on_leave(e, btn=btn):
                btn.config(bg="#2a2a2a")
            btn.bind("<Enter>", on_enter)
            btn.bind("<Leave>", on_leave)
            
            col += 1
            if col >= 4:
                col = 0
                row += 1
        
        # 配置网格权重
        for i in range(4):
            btn_frame.grid_columnconfigure(i, weight=1)
        
        # "特殊" 按钮 - 巨额消费
        special_frame = tk.Frame(parent, bg="#0a0a0a")
        special_frame.pack(fill=tk.X, pady=5)
        
        mega_products = [
            ("🏢 购买 Twitter", 440.0, "收购社交媒体"),
            ("🌍 火星殖民计划", 1000.0, "星际移民"),
            ("🔋 特斯拉电池工厂", 500.0, "超级工厂"),
            ("🤖 Neuralink 研究", 300.0, "脑机接口"),
        ]
        
        for name, price, desc in mega_products:
            btn = tk.Button(
                special_frame,
                text=f"🔥 {name}\n${price}亿",
                font=("Arial", 10, "bold"),
                bg="#8b0000",
                fg="#ffd700",
                relief=tk.RAISED,
                bd=3,
                padx=15,
                pady=8,
                cursor="hand2",
                command=lambda n=name, p=price, d=desc: self.buy_item(n, p, d)
            )
            btn.pack(side=tk.LEFT, padx=5, expand=True, fill=tk.X)
            
            def on_enter(e, btn=btn):
                btn.config(bg="#aa0000")
            def on_leave(e, btn=btn):
                btn.config(bg="#8b0000")
            btn.bind("<Enter>", on_enter)
            btn.bind("<Leave>", on_leave)
    
    def buy_item(self, name, price, desc):
        """购买商品"""
        if self.remaining < price:
            messagebox.showwarning("💰 钱不够！", 
                f"剩余 ${self.remaining:.1f} 亿\n"
                f"买不起 {name} (需要 ${price:.1f} 亿)\n"
                f"建议：先买点便宜的！")
            return
        
        if self.is_spending:
            messagebox.showinfo("⏳ 稍等", "正在疯狂购物中，请稍后再试！")
            return
        
        # 扣钱
        self.remaining -= price
        self.spent += price
        self.total_items += 1
        
        # 记录
        timestamp = datetime.now().strftime("%H:%M:%S")
        record = f"[{timestamp}] 买了 {name} - ${price:.1f}亿  ({desc})"
        self.purchase_history.append(record)
        
        # 更新界面
        self.update_display()
        self.add_history(record)
        
        # 检查成就
        self.check_achievements()
        
        # 特殊反馈
        if price >= 100:
            self.log_message(f"💥 大手笔！买了 {name}！马斯克心在滴血...")
        elif price >= 20:
            self.log_message(f"🤑 土豪啊！{name} 入手！")
        else:
            self.log_message(f"🛍️ 小败家：{name} 到手！")
        
        # 检查是否花光
        if self.remaining <= 0:
            self.game_over()
    
    def auto_spend(self):
        """自动败家模式 - 疯狂买买买"""
        if self.is_spending:
            return
        
        if self.remaining <= 0:
            messagebox.showinfo("💸", "钱已经花光了！你已经击败了马斯克！")
            return
        
        self.is_spending = True
        self.auto_spend_btn.config(state=tk.DISABLED)
        self.stop_btn.config(state=tk.NORMAL)
        
        self.log_message("🔥 开启自动败家模式！马斯克要哭了...")
        
        # 在新线程中疯狂购物
        self.spend_thread = threading.Thread(target=self.auto_buy_loop, daemon=True)
        self.spend_thread.start()
    
    def auto_buy_loop(self):
        """自动购物循环"""
        products = [
            ("🏎️ 特斯拉", 0.5),
            ("🏠 豪宅", 2.0),
            ("🚀 太空票", 5.0),
            ("🏝️ 岛屿", 8.0),
            ("✈️ 飞机", 4.0),
            ("🎨 名画", 3.0),
            ("💎 钻石", 12.0),
            ("🏟️ 球场", 20.0),
            ("🛰️ 卫星", 25.0),
            ("🚢 游轮", 18.0),
        ]
        
        while self.is_spending and self.remaining > 0:
            # 随机选择商品
            name, price = random.choice(products)
            
            # 如果剩余不够，调低价格
            if self.remaining < price:
                # 找最便宜的商品
                cheap_items = [p for p in products if p[1] <= self.remaining]
                if cheap_items:
                    name, price = random.choice(cheap_items)
                else:
                    # 随机小额消费
                    price = random.uniform(0.1, min(1.0, self.remaining))
                    name = f"🎁 随机小物件 (${price:.1f}亿)"
            
            # 购买
            self.remaining -= price
            self.spent += price
            self.total_items += 1
            
            timestamp = datetime.now().strftime("%H:%M:%S")
            record = f"[{timestamp}] 🤖 自动买了 {name} - ${price:.1f}亿"
            self.purchase_history.append(record)
            
            # 在主线程更新界面
            self.root.after(0, self.update_display)
            self.root.after(0, lambda r=record: self.add_history(r))
            
            # 随机速度
            time.sleep(random.uniform(0.1, 0.5))
        
        # 停止自动模式
        self.root.after(0, self.stop_spending)
        
        # 检查是否花光
        if self.remaining <= 0:
            self.root.after(0, self.game_over)
    
    def stop_spending(self):
        """停止自动购物"""
        self.is_spending = False
        self.auto_spend_btn.config(state=tk.NORMAL)
        self.stop_btn.config(state=tk.DISABLED)
        self.log_message("⏹ 自动败家模式已停止")
    
    def update_display(self):
        """更新所有显示"""
        # 剩余金额
        self.remaining_label.config(text=f"💰 剩余: ${self.remaining:.1f} 亿")
        
        # 已花费
        self.spent_label.config(text=f"💸 已花: ${self.spent:.1f} 亿")
        
        # 进度条
        spent_percent = (self.spent / self.total_wealth) * 100
        self.progress['value'] = self.spent
        
        # 更新进度条颜色（通过样式）
        if spent_percent < 30:
            color = "#4caf50"
        elif spent_percent < 60:
            color = "#ff9800"
        elif spent_percent < 90:
            color = "#ff5722"
        else:
            color = "#ff0000"
        
        # 更新统计
        spent_percent = min(spent_percent, 100)
        emoji = self.get_musk_emoji(spent_percent)
        self.stats_label.config(
            text=f"📊 已消费 {self.total_items} 件商品 | 败家进度 {spent_percent:.1f}% | 马斯克表情: {emoji}"
        )
    
    def get_musk_emoji(self, percent):
        """根据败家程度返回马斯克表情"""
        if percent < 10:
            return "😎"  # 不在乎
        elif percent < 30:
            return "😅"  # 有点紧张
        elif percent < 50:
            return "😰"  # 慌了
        elif percent < 70:
            return "😱"  # 惊恐
        elif percent < 90:
            return "😭"  # 哭了
        else:
            return "💀"  # 凉了
    
    def add_history(self, record):
        """添加历史记录"""
        self.history_text.config(state=tk.NORMAL)
        self.history_text.insert(tk.END, record + "\n")
        self.history_text.see(tk.END)
        self.history_text.config(state=tk.DISABLED)
        
        # 限制显示行数
        lines = int(self.history_text.index('end-1c').split('.')[0])
        if lines > 200:
            self.history_text.config(state=tk.NORMAL)
            self.history_text.delete(1.0, 50.0)
            self.history_text.config(state=tk.DISABLED)
    
    def log_message(self, msg):
        """日志消息（显示在控制台）"""
        print(f"[{datetime.now().strftime('%H:%M:%S')}] {msg}")
    
    def check_achievements(self):
        """检查成就"""
        achievements_unlocked = []
        
        if self.total_items >= 1 and not self.achievements["first_buy"]:
            self.achievements["first_buy"] = True
            achievements_unlocked.append("🎉 第一次败家！")
        
        if self.spent >= 10 and not self.achievements["billionaire"]:
            self.achievements["billionaire"] = True
            achievements_unlocked.append("💰 花费超过10亿！")
        
        if self.spent >= 100 and not self.achievements["hundred_billion"]:
            self.achievements["hundred_billion"] = True
            achievements_unlocked.append("🔥 败家超100亿！马斯克开始慌了！")
        
        if self.remaining <= 0 and not self.achievements["broke"]:
            self.achievements["broke"] = True
            achievements_unlocked.append("🏆 终极成就：花光马斯克的所有钱！")
        
        if achievements_unlocked:
            current = self.achievement_label.cget("text")
            for ach in achievements_unlocked:
                current = current.replace("🏅 成就: ", "") + " | " + ach
                self.achievement_label.config(text=f"🏅 成就: {current}")
    
    def game_over(self):
        """游戏结束"""
        self.is_spending = False
        self.auto_spend_btn.config(state=tk.DISABLED)
        self.stop_btn.config(state=tk.DISABLED)
        
        total_items = self.total_items
        total_spent = self.spent
        
        # 最终统计
        msg = f"""
        🎊 恭喜！你成功花光了马斯克的所有钱！🎊
        
        📊 最终统计:
        • 总花费: ${total_spent:.1f} 亿美元
        • 购买次数: {total_items} 次
        • 败家效率: 100% 💯
        
        💡 马斯克现在:
        • 账户余额: $0.0 亿
        • 表情: 💀
        • 只能去麦当劳打工了 😂
        
        要不要再来一次？
        """
        
        messagebox.showinfo("🏆 败家成功！", msg)
        self.log_message("🏆 游戏结束！马斯克破产了！")
        
        # 禁用所有购买按钮（通过禁用父框架）
        for widget in self.root.winfo_children():
            if isinstance(widget, tk.Frame):
                for child in widget.winfo_children():
                    if isinstance(child, tk.Button) and child != self.reset_btn:
                        child.config(state=tk.DISABLED)
        
        # 重置按钮启用
        reset_btn = tk.Button(
            self.root,
            text="🔄 再来一次",
            font=("Arial", 14, "bold"),
            bg="#4caf50",
            fg="white",
            padx=30,
            pady=10,
            cursor="hand2",
            command=self.reset_game
        )
        reset_btn.place(relx=0.5, rely=0.5, anchor=tk.CENTER)
        self.reset_btn_ref = reset_btn
    
    def reset_game(self):
        """重置游戏"""
        self.remaining = self.total_wealth
        self.spent = 0
        self.total_items = 0
        self.purchase_history = []
        self.is_spending = False
        self.achievements = {
            "first_buy": False,
            "billionaire": False,
            "hundred_billion": False,
            "broke": False,
            "speed_buy": False
        }
        
        # 清空历史
        self.history_text.config(state=tk.NORMAL)
        self.history_text.delete(1.0, tk.END)
        self.history_text.config(state=tk.DISABLED)
        
        # 更新显示
        self.update_display()
        self.achievement_label.config(text="🏅 成就: 无")
        self.progress['value'] = 0
        self.auto_spend_btn.config(state=tk.NORMAL)
        self.stop_btn.config(state=tk.DISABLED)
        
        # 启用所有按钮
        for widget in self.root.winfo_children():
            if isinstance(widget, tk.Frame):
                for child in widget.winfo_children():
                    if isinstance(child, tk.Button):
                        child.config(state=tk.NORMAL)
        
        # 移除重置按钮
        if hasattr(self, 'reset_btn_ref'):
            self.reset_btn_ref.destroy()
        
        self.log_message("🔄 游戏已重置，开始新一轮败家！")

if __name__ == "__main__":
    root = tk.Tk()
    app = SpendElonMoney(root)
    root.mainloop()