import pygame
import sys
from datetime import datetime

# 初始化Pygame
pygame.init()

# 屏幕设置
WIDTH, HEIGHT = 600, 400
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("星座/生肖查询器")

# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
LIGHT_BLUE = (173, 216, 230)
GRAY = (200, 200, 200)

# 修复中文显示：使用系统中文字体
def get_chinese_font(size):
    # 尝试多种常见中文字体，按优先级排序
    font_names = [
        "SimHei",           # Windows 黑体
        "Microsoft YaHei",  # Windows 微软雅黑
        "SimSun",           # Windows 宋体
        "PingFang SC",      # macOS 苹方
        "Heiti SC",         # macOS 黑体
        "WenQuanYi Micro Hei",  # Linux 文泉驿微米黑
        "Noto Sans CJK SC"  # 通用 Noto 中文字体
    ]
    
    for font_name in font_names:
        try:
            font = pygame.font.SysFont(font_name, size)
            # 测试是否能正确渲染中文
            test_text = font.render("测试", True, BLACK)
            if test_text.get_width() > 10:  # 如果能渲染出宽度，说明字体可用
                return font
        except:
            continue
    
    # 如果所有中文字体都找不到，使用默认字体并给出提示
    print("警告：未找到支持中文的字体，中文可能显示为方块")
    return pygame.font.Font(None, size)

# 字体设置（现在使用支持中文的字体）
font_large = get_chinese_font(48)
font_medium = get_chinese_font(36)
font_small = get_chinese_font(28)

# 星座数据
zodiac_signs = [
    ("摩羯座", (12, 22), (1, 19)),
    ("水瓶座", (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))
]

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

# 输入框类
class InputBox:
    def __init__(self, x, y, w, h, text=''):
        self.rect = pygame.Rect(x, y, w, h)
        self.color = BLACK
        self.text = text
        self.txt_surface = font_small.render(text, True, self.color)
        self.active = False

    def handle_event(self, event):
        if event.type == pygame.MOUSEBUTTONDOWN:
            self.active = self.rect.collidepoint(event.pos)
            self.color = LIGHT_BLUE if self.active else BLACK
        if event.type == pygame.KEYDOWN:
            if self.active:
                if event.key == pygame.K_RETURN:
                    return self.text
                elif event.key == pygame.K_BACKSPACE:
                    self.text = self.text[:-1]
                else:
                    self.text += event.unicode
                self.txt_surface = font_small.render(self.text, True, self.color)
        return None

    def draw(self, screen):
        screen.blit(self.txt_surface, (self.rect.x+5, self.rect.y+5))
        pygame.draw.rect(screen, self.color, self.rect, 2)

# 主程序
def main():
    input_box = InputBox(200, 150, 200, 40)
    result_text = ""
    
    while True:
        screen.fill(WHITE)
        
        # 绘制标题
        title = font_large.render("星座/生肖查询", True, BLACK)
        screen.blit(title, (WIDTH//2 - title.get_width()//2, 50))
        
        # 绘制提示
        prompt = font_small.render("请输入生日(格式: YYYY-MM-DD):", True, BLACK)
        screen.blit(prompt, (100, 120))
        
        # 绘制输入框
        input_box.draw(screen)
        
        # 绘制结果
        if result_text:
            result_surface = font_medium.render(result_text, True, BLACK)
            screen.blit(result_surface, (WIDTH//2 - result_surface.get_width()//2, 250))
        
        # 事件处理
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            
            input_result = input_box.handle_event(event)
            if input_result:
                try:
                    birth_date = datetime.strptime(input_result, "%Y-%m-%d")
                    month, day = birth_date.month, birth_date.day
                    
                    # 计算星座
                    zodiac = "未知"
                    for sign, start, end in zodiac_signs:
                        if (month == start[0] and day >= start[1]) or (month == end[0] and day <= end[1]):
                            zodiac = sign
                            break
                    
                    # 计算生肖
                    zodiac_index = (birth_date.year - 1900) % 12
                    chinese_sign = chinese_zodiac[zodiac_index]
                    
                    result_text = f"星座: {zodiac} | 生肖: {chinese_sign}"
                except ValueError:
                    result_text = "格式错误，请输入YYYY-MM-DD"
        
        pygame.display.flip()

if __name__ == "__main__":
    main()