import tkinter as tk
from tkinter import ttk, messagebox

# 星座日期边界 (月,日)
constellation_dates = [
    ((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), "水瓶座")
]

# 星座介绍
constellation_info = {
    "水瓶座": "独立创新，思维跳脱，崇尚自由与独特",
    "双鱼座": "温柔浪漫，共情力强，爱幻想内心细腻",
    "白羊座": "热情冲动，敢爱敢恨，行动力十足",
    "金牛座": "稳重务实，偏爱安稳，审美极佳爱吃美食",
    "双子座": "机灵善辩，好奇心强，擅长社交多才多艺",
    "巨蟹座": "顾家恋旧，敏感体贴，重视家人安全感",
    "狮子座": "自信大方，爱面子讲义气，天生领导者",
    "处女座": "细致严谨，追求完美，心思缜密爱整洁",
    "天秤座": "优雅纠结，追求公平，擅长调和人际关系",
    "天蝎座": "深情专一，洞察力强，爱恨分明记仇隐忍",
    "射手座": "乐观爱自由，向往远方，随性不爱被束缚",
    "摩羯座": "隐忍努力，事业心重，踏实慢热厚积薄发"
}

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


def get_zodiac(year):
    """计算生肖"""
    idx = (year - 1900) % 12
    return zodiac_list[idx]


def get_constellation(month, day):
    """获取星座"""
    for (m, d), star in constellation_dates:
        if month < m or (month == m and day <= d):
            return star
    return "摩羯座"


def query():
    """查询按钮触发函数"""
    year_str = entry_year.get().strip()
    month_str = entry_month.get().strip()
    day_str = entry_day.get().strip()

    # 校验输入
    if not (year_str and month_str and day_str):
        messagebox.showwarning("提示", "请填写完整出生年月日！")
        return
    try:
        year = int(year_str)
        month = int(month_str)
        day = int(day_str)
    except ValueError:
        messagebox.showerror("错误", "年月日必须输入纯数字！")
        return

    if not (1 <= month <= 12 and 1 <= day <= 31):
        messagebox.showerror("错误", "月份1-12，日期1-31！")
        return

    # 计算结果
    zodiac = get_zodiac(year)
    star_sign = get_constellation(month, day)
    info = constellation_info[star_sign]

    # 清空并写入结果
    result_text.delete(1.0, tk.END)
    res = f"【出生年份】{year}年\n【生肖】{zodiac}\n【星座】{star_sign}\n\n星座解析：{info}"
    result_text.insert(tk.END, res)


# ---------------------- 界面搭建 ----------------------
root = tk.Tk()
root.title("星座生肖查询工具")
root.geometry("420x320")
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=3)
entry_year = ttk.Entry(frame_input, width=8)
entry_year.grid(row=0, column=1, padx=3)

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

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

# 查询按钮
btn_query = ttk.Button(root, text="开始查询", command=query)
btn_query.pack(pady=12)

# 结果文本框
ttk.Label(root, text="查询结果：").pack(anchor="w", padx=25)
result_text = tk.Text(root, width=48, height=8, font=("微软雅黑", 10))
result_text.pack(padx=20, pady=5)

root.mainloop()