import tkinter as tk
from tkinter import ttk, messagebox
from datetime import datetime

# 星座信息
zodiac_signs = [
    ("水瓶座", 1, 20, 2, 18),
    ("双鱼座", 2, 19, 3, 20),
    ("白羊座", 3, 21, 4, 19),
    ("金牛座", 4, 20, 5, 20),
    ("双子座", 5, 21, 6, 21),
    ("巨蟹座", 6, 22, 7, 22),
    ("狮子座", 7, 23, 8, 22),
    ("处女座", 8, 23, 9, 22),
    ("天秤座", 9, 23, 10, 23),
    ("天蝎座", 10, 24, 11, 22),
    ("射手座", 11, 23, 12, 21),
    ("摩羯座", 12, 22, 1, 19)
]

# 生肖信息
chinese_zodiac = ["鼠", "牛", "虎", "兔", "龙", "蛇",
                  "马", "羊", "猴", "鸡", "狗", "猪"]

# 根据生日获取星座
def get_constellation(month, day):
    for sign, sm, sd, em, ed in zodiac_signs:
        if (month == sm and day >= sd) or (month == em and day <= ed):
            return sign
    return "摩羯座"

# 根据年份获取生肖
def get_zodiac(year):
    return chinese_zodiac[(year - 4) % 12]

# 查询主逻辑
def query():
    try:
        year = int(entry_year.get())
        month = int(entry_month.get())
        day = int(entry_day.get())

        # 简单日期校验
        datetime(year, month, day)

        constellation = get_constellation(month, day)
        zodiac = get_zodiac(year)

        result_text = (
            f"📅 出生日期：{year}年{month}月{day}日\n\n"
            f"✨ 星座：{constellation}\n"
            f"🐉 生肖：{zodiac}"
        )
        result_label.config(text=result_text)

    except ValueError:
        messagebox.showerror("错误", "请输入正确的年月日！")

# 清空输入
def clear():
    entry_year.delete(0, tk.END)
    entry_month.delete(0, tk.END)
    entry_day.delete(0, tk.END)
    result_label.config(text="等待查询...")

# ==================== 界面 ====================
root = tk.Tk()
root.title("星座生肖查询小程序")
root.geometry("420x350")
root.resizable(False, False)

# 标题
title_label = ttk.Label(root, text="🐍 星座 & 生肖查询器", font=("微软雅黑", 16, "bold"))
title_label.pack(pady=15)

# 输入框框架
frame_input = ttk.Frame(root)
frame_input.pack(pady=5)

ttk.Label(frame_input, text="年：").grid(row=0, column=0, padx=5)
entry_year = ttk.Entry(frame_input, width=8)
entry_year.grid(row=0, column=1, padx=5)

ttk.Label(frame_input, text="月：").grid(row=0, column=2, padx=5)
entry_month = ttk.Entry(frame_input, width=8)
entry_month.grid(row=0, column=3, padx=5)

ttk.Label(frame_input, text="日：").grid(row=0, column=4, padx=5)
entry_day = ttk.Entry(frame_input, width=8)
entry_day.grid(row=0, column=5, padx=5)

# 按钮
frame_btn = ttk.Frame(root)
frame_btn.pack(pady=12)

btn_query = ttk.Button(frame_btn, text="查询", command=query, width=10)
btn_query.grid(row=0, column=0, padx=10)

btn_clear = ttk.Button(frame_btn, text="清空", command=clear, width=10)
btn_clear.grid(row=0, column=1, padx=10)

# 结果显示
result_label = ttk.Label(root, text="等待查询...", font=("微软雅黑", 12), justify=tk.LEFT)
result_label.pack(pady=20)

# 运行
root.mainloop()