import pygame

# ====================
# 初始化
# ====================
pygame.init()
WIDTH, HEIGHT = 520, 360
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("重量单位转换器")

font = pygame.font.SysFont("simhei", 26)
clock = pygame.time.Clock()

# ====================
# 单位定义
# ====================
units = ["mg", "g", "kg", "t"]
factors = {
    "mg": 0.001,
    "g": 1,
    "kg": 1000,
    "t": 1000000
}

input_text = ""
from_unit = "g"
to_unit = "kg"
result = ""

# ====================
# 按钮
# ====================
from_buttons = {}
to_buttons = {}

for i, u in enumerate(units):
    from_buttons[u] = pygame.Rect(40, 110 + i * 50, 80, 40)
    to_buttons[u] = pygame.Rect(300, 110 + i * 50, 80, 40)

# ====================
# 主循环
# ====================
running = True
while running:
    screen.fill((25, 25, 35))

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_BACKSPACE:
                input_text = input_text[:-1]
            elif event.unicode.isdigit() or event.unicode == ".":
                input_text += event.unicode

        if event.type == pygame.MOUSEBUTTONDOWN:
            x, y = event.pos
            for u, rect in from_buttons.items():
                if rect.collidepoint(x, y):
                    from_unit = u
            for u, rect in to_buttons.items():
                if rect.collidepoint(x, y):
                    to_unit = u

    # ====================
    # 计算
    # ====================
    try:
        value = float(input_text)
        grams = value * factors[from_unit]
        converted = grams / factors[to_unit]
        result = f"{converted:.4f} {to_unit}"
    except:
        result = "--"

    # ====================
    # 绘制
    # ====================
    title = font.render("重量单位转换器", True, (255, 255, 255))
    screen.blit(title, (160, 20))

    screen.blit(font.render("输入数值:", True, (200, 200, 200)), (40, 70))
    pygame.draw.rect(screen, (60, 60, 80), (160, 65, 200, 40))
    screen.blit(font.render(input_text, True, (255, 255, 255)), (170, 70))

    # 原单位
    for u, rect in from_buttons.items():
        color = (0, 180, 120) if u == from_unit else (60, 60, 80)
        pygame.draw.rect(screen, color, rect)
        screen.blit(font.render(u, True, (255, 255, 255)),
                    (rect.x + 20, rect.y + 10))

    # 目标单位
    for u, rect in to_buttons.items():
        color = (0, 120, 220) if u == to_unit else (60, 60, 80)
        pygame.draw.rect(screen, color, rect)
        screen.blit(font.render(u, True, (255, 255, 255)),
                    (rect.x + 20, rect.y + 10))

    # 结果
    screen.blit(font.render("结果:", True, (200, 200, 200)), (40, 310))
    screen.blit(font.render(result, True, (0, 255, 150)), (120, 310))

    pygame.display.flip()
    clock.tick(30)

pygame.quit()
