import tkinter as tk
from tkinter import ttk, messagebox

# 星座数据 (月,日起始,星座名,简介)
constellation_data = [
    ((1, 20), "水瓶座", "创新独立，追求自由，思维独特"),
    ((2, 19), "双鱼座", "温柔浪漫，富有想象力，善解人意"),
    ((3, 21), "白羊座", "热情冲动，勇敢直率，行动力强"),
    ((4, 20), "金牛座", "稳重踏实，热爱美好，耐心十足"),
    ((5, 21), "双子座", "思维敏捷，善于沟通，好奇心旺盛"),
    ((6, 22), "巨蟹座", "顾家敏感，内心温柔，重视情感"),
    ((7, 23), "狮子座", "自信大方，热情仗义，渴望认可"),
    ((8, 23), "处女座", "细致严谨，追求完美，务实理性"),
    ((9, 23), "天秤座", "优雅和善，追求平衡，审美出众"),
    ((10, 24), "天蝎座", "洞察力强，爱恨分明，意志力强"),
    ((11, 23), "射手座", "乐观豁达，热爱自由，向往远方"),
    ((12, 22), "摩羯座", "沉稳自律，吃苦耐劳，目标明确"),
    ((12, 32), "水瓶座", "创新独立，追求自由，思维独特")
]

# 生肖列表
zodiac_list = ["鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"]


def get_constellation(month, day):
    """获取星座"""
    for (m, d), name, desc in constellation_data:
        if (month == m and day >= d) or (month == m + 1 and day < d):
            return name, desc
    return "未知", ""


def get_zodiac(year):
    """获取生肖，1900鼠年为基准"""
    index = (year - 1900) % 12
    return zodiac_list[index]


def query_info():
    """查询按钮触发函数"""
    try:
        year = int(entry_year.get())
        month = int(entry_month.get())
        day = int(entry_day.get())

        # 简单范围校验
        if not (1 <= month <= 12):
            messagebox.showerror("错误", "月份范围1~12！")
            return
        if not (1 <= day <= 31):
            messagebox.showerror("错误", "日期范围1~31！")
            return

        zodiac = get_zodiac(year)
        cons_name, cons_desc = get_constellation(month, day)

        # 输出结果
        result_text.set(f"【生肖】{zodiac}\n【星座】{cons_name}\n【简介】{cons_desc}")
    except ValueError:
        messagebox.showerror("输入错误", "请输入有效的数字年月日！")


# =========== 创建窗口 ===========
root = tk.Tk()
root.title("星座生肖查询工具")
root.geometry("420x280")
root.resizable(False, False)

# 标题
title_label = tk.Label(root, text="✨ 星座生肖查询小程序", font=("微软雅黑", 16))
title_label.pack(pady=12)

# 输入框架
frame_input = tk.Frame(root)
frame_input.pack()

tk.Label(frame_input, text="年份：", font=("微软雅黑", 11)).grid(row=0, column=0, padx=5)
entry_year = ttk.Entry(frame_input, width=8, font=("微软雅黑", 11))
entry_year.grid(row=0, column=1, padx=5)

tk.Label(frame_input, text="月份：", font=("微软雅黑", 11)).grid(row=0, column=2, padx=5)
entry_month = ttk.Entry(frame_input, width=5, font=("微软雅黑", 11))
entry_month.grid(row=0, column=3, padx=5)

tk.Label(frame_input, text="日期：", font=("微软雅黑", 11)).grid(row=0, column=4, padx=5)
entry_day = ttk.Entry(frame_input, width=5, font=("微软雅黑", 11))
entry_day.grid(row=0, column=5, padx=5)

# 查询按钮
btn_query = tk.Button(root, text="开始查询", command=query_info,
                      font=("微软雅黑", 11), bg="#409EFF", fg="white")
btn_query.pack(pady=15)

# 结果显示
result_text = tk.StringVar()
label_result = tk.Label(root, textvariable=result_text, font=("微软雅黑", 12),
                        fg="#222", wraplength=380)
label_result.pack()

root.mainloop()