import tkinter as tk
from tkinter import ttk
import random
from datetime import datetime

# ====================== 12星座完整数据（标准阳历日期） ======================
constellation_data = [
    {"name": "白羊座", "date": (3, 21, 4, 19), "symbol": "♈"},
    {"name": "金牛座", "date": (4, 20, 5, 20), "symbol": "♉"},
    {"name": "双子座", "date": (5, 21, 6, 21), "symbol": "♊"},
    {"name": "巨蟹座", "date": (6, 22, 7, 22), "symbol": "♋"},
    {"name": "狮子座", "date": (7, 23, 8, 22), "symbol": "♌"},
    {"name": "处女座", "date": (8, 23, 9, 22), "symbol": "♍"},
    {"name": "天秤座", "date": (9, 23, 10, 23), "symbol": "♎"},
    {"name": "天蝎座", "date": (10, 24, 11, 22), "symbol": "♏"},
    {"name": "射手座", "date": (11, 23, 12, 21), "symbol": "♐"},
    {"name": "摩羯座", "date": (12, 22, 1, 19), "symbol": "♑"},
    {"name": "水瓶座", "date": (1, 20, 2, 18), "symbol": "♒"},
    {"name": "双鱼座", "date": (2, 19, 3, 20), "symbol": "♓"}
]

# ====================== 娱乐向运势库 ======================
fortune_text = {
    "overall": [
        "今日运势平稳，心态平和，适合稳步推进计划",
        "整体状态极佳，灵感满满，做事事半功倍",
        "小有波折，耐心应对即可顺利化解",
        "好运加持，贵人相助，诸事顺遂",
        "平淡安稳的一天，适合休整沉淀自己"
    ],
    "love": [
        "感情氛围甜蜜，单身者有偶遇良缘机会",
        "情侣相处融洽，适合沟通谈心增进感情",
        "单身状态自由松弛，享受独处时光",
        "感情小有摩擦，冷静沟通即可化解",
        "桃花运平稳，静待合适的缘分出现"
    ],
    "career": [
        "工作思路清晰，效率超高，容易获得认可",
        "适合学习提升，积累经验沉淀自我",
        "团队协作顺畅，配合默契，进展顺利",
        "琐事较多，需要耐心细致处理",
        "事业运势平稳，不宜激进，稳中求进"
    ],
    "money": [
        "财运尚可，小额收获，理性消费为佳",
        "正财稳定，偏财平平，踏实求财最稳妥",
        "财运不错，有意外小惊喜收入",
        "今日谨慎消费，避免不必要开支",
        "资金平稳，适合规划储蓄理财"
    ],
    "health": [
        "身心状态良好，活力满满，适合适度运动",
        "注意作息规律，避免熬夜劳累",
        "气色红润，心态轻松，身体健康无忧",
        "久坐易疲惫，记得起身活动放松",
        "饮食清淡为宜，养护肠胃状态更佳"
    ]
}

class ConstellationFortune:
    def __init__(self, root):
        self.root = root
        self.root.title("每日星座运势 | 娱乐小程序")
        self.root.geometry("520x620")
        self.root.resizable(False, False)
        self.root.configure(bg="#f5f7fa")

        # 初始化变量
        self.now_date = datetime.now().strftime("%Y年%m月%d日")
        self.current_star = ""

        # 构建UI
        self.build_ui()
        # 默认随机加载一个星座运势
        self.random_fortune()

    # 生日匹配星座
    def get_constellation(self, month, day):
        for star in constellation_data:
            sm, sd, em, ed = star["date"]
            if (month == sm and day >= sd) or (month == em and day <= ed):
                return star
            if sm > em:
                if (month == sm and day >= sd) or (month == em and day <= ed):
                    return star
        return constellation_data[0]

    # 搭建界面
    def build_ui(self):
        # 顶部标题
        tk.Label(self.root, text="✨ 每日星座运势 ✨", font=("微软雅黑", 22, "bold"), bg="#f5f7fa", fg="#4a6cf7").pack(pady=15)
        tk.Label(self.root, text=f"查询日期：{self.now_date}", font=("微软雅黑", 11), bg="#f5f7fa", fg="#666").pack()

        # 星座选择区域
        select_frame = tk.Frame(self.root, bg="#f5f7fa")
        select_frame.pack(pady=20)
        tk.Label(select_frame, text="选择星座：", font=("微软雅黑", 12), bg="#f5f7fa").grid(row=0, column=0, padx=5)

        self.star_var = tk.StringVar()
        star_list = [item["name"] for item in constellation_data]
        star_combo = ttk.Combobox(select_frame, textvariable=self.star_var, values=star_list, width=12, font=("微软雅黑", 11))
        star_combo.grid(row=0, column=1, padx=5)
        star_combo.bind("<<ComboboxSelected>>", self.select_star_fortune)

        # 生日匹配按钮
        tk.Label(select_frame, text=" 或 输入生日：", font=("微软雅黑", 12), bg="#f5f7fa").grid(row=0, column=2)
        self.month_var = tk.StringVar()
        self.day_var = tk.StringVar()
        tk.Entry(select_frame, textvariable=self.month_var, width=4, font=("微软雅黑", 11)).grid(row=0, column=3)
        tk.Label(select_frame, text="月", bg="#f5f7fa").grid(row=0, column=4)
        tk.Entry(select_frame, textvariable=self.day_var, width=4, font=("微软雅黑", 11)).grid(row=0, column=5)
        tk.Label(select_frame, text="日", bg="#f5f7fa").grid(row=0, column=6)
        tk.Button(select_frame, text="匹配星座", command=self.birth_match, bg="#4a6cf7", fg="white", font=("微软雅黑", 10)).grid(row=1, column=3, columnspan=4, pady=5)

        # 星座名称+符号展示
        self.star_show = tk.Label(self.root, text="♈ 白羊座", font=("微软雅黑", 20, "bold"), bg="#f5f7fa", fg="#222")
        self.star_show.pack(pady=10)

        # 运势卡片框架
        card_frame = tk.Frame(self.root, bg="white", bd=0, relief=tk.RIDGE)
        card_frame.pack(padx=30, pady=10, fill="x")

        # 五大运势展示
        self.overall_text = self.create_item(card_frame, "🌍 整体运势")
        self.love_text = self.create_item(card_frame, "❤️ 爱情运势")
        self.career_text = self.create_item(card_frame, "💼 事业运势")
        self.money_text = self.create_item(card_frame, "💰 财运运势")
        self.health_text = self.create_item(card_frame, "🏥 健康运势")

        # 刷新按钮
        btn_frame = tk.Frame(self.root, bg="#f5f7fa")
        btn_frame.pack(pady=25)
        tk.Button(btn_frame, text="🔄 刷新今日运势", command=self.random_fortune, font=("微软雅黑", 12), bg="#4a6cf7", fg="white", width=15, relief=tk.FLAT).grid(row=0, column=0, padx=10)
        tk.Button(btn_frame, text="🎲 随机星座运势", command=self.random_star_fortune, font=("微软雅黑", 12), bg="#36cfa9", fg="white", width=15, relief=tk.FLAT).grid(row=0, column=1, padx=10)

        # 底部提示
        tk.Label(self.root, text="本结果仅供娱乐，请勿当真", font=("微软雅黑", 9), fg="#999", bg="#f5f7fa").pack(side=tk.BOTTOM, pady=10)

    # 创建单项运势组件
    def create_item(self, parent, title):
        frame = tk.Frame(parent, bg="white")
        frame.pack(fill="x", padx=20, pady=8)
        tk.Label(frame, text=title, font=("微软雅黑", 11, "bold"), bg="white", fg="#4a6cf7").grid(row=0, column=0, sticky="w")
        res_label = tk.Label(frame, text="", font=("微软雅黑", 10), bg="white", fg="#333", wraplength=400, justify="left")
        res_label.grid(row=1, column=0, sticky="w", pady=3)
        return res_label

    # 刷新运势内容
    def refresh_fortune(self, star_name, star_symbol):
        self.current_star = star_name
        self.star_show.config(text=f"{star_symbol} {star_name}")
        # 随机抽取各维度运势
        self.overall_text.config(text=random.choice(fortune_text["overall"]))
        self.love_text.config(text=random.choice(fortune_text["love"]))
        self.career_text.config(text=random.choice(fortune_text["career"]))
        self.money_text.config(text=random.choice(fortune_text["money"]))
        self.health_text.config(text=random.choice(fortune_text["health"]))

    # 选择指定星座运势
    def select_star_fortune(self, event):
        name = self.star_var.get()
        for item in constellation_data:
            if item["name"] == name:
                self.refresh_fortune(item["name"], item["symbol"])
                return

    # 随机刷新当前星座运势
    def random_fortune(self):
        if not self.current_star:
            self.random_star_fortune()
        else:
            for item in constellation_data:
                if item["name"] == self.current_star:
                    self.refresh_fortune(item["name"], item["symbol"])
                    return

    # 随机星座+随机运势
    def random_star_fortune(self):
        star = random.choice(constellation_data)
        self.star_var.set(star["name"])
        self.refresh_fortune(star["name"], star["symbol"])

    # 生日匹配星座
    def birth_match(self):
        try:
            m = int(self.month_var.get())
            d = int(self.day_var.get())
            if not (1 <= m <= 12 and 1 <= d <= 31):
                tk.messagebox.showwarning("提示", "请输入合法的月、日！")
                return
            star = self.get_constellation(m, d)
            self.star_var.set(star["name"])
            self.refresh_fortune(star["name"], star["symbol"])
        except:
            tk.messagebox.showwarning("提示", "请输入纯数字生日！")

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