import pygame
import sys

pygame.init()
WIDTH, HEIGHT = 520, 420
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Weight Converter")

# ✅ 使用默认字体（关键修复）
FONT = pygame.font.Font(None, 28)

# 颜色
BG = (30, 30, 30)
PANEL = (45, 45, 48)
INPUT_BG = (60, 63, 65)
TEXT = (230, 230, 230)
ACCENT = (0, 150, 220)
GREEN = (60, 180, 90)

# 单位
UNITS = {
    "kg": 1.0,
    "g": 0.001,
    "mg": 0.000001,
    "lb": 0.45359237,
    "oz": 0.0283495231,
    "t": 1000.0,
    "st": 6.35029318
}
unit_list = list(UNITS.keys())

input_text = ""
result_text = ""
from_unit = "kg"
to_unit = "lb"

input_rect = pygame.Rect(40, 70, 200, 36)
from_rect = pygame.Rect(40, 130, 120, 36)
to_rect = pygame.Rect(180, 130, 120, 36)
convert_btn = pygame.Rect(260, 70, 140, 44)
result_rect = pygame.Rect(40, 240, 440, 60)

def convert_weight(v, f, t):
    return v * UNITS[f] / UNITS[t]

clock = pygame.time.Clock()
running = True

while running:
    screen.fill(BG)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        elif event.type == pygame.MOUSEBUTTONDOWN:
            if convert_btn.collidepoint(event.pos):
                try:
                    v = float(input_text)
                    r = convert_weight(v, from_unit, to_unit)
                    result_text = f"{v} {from_unit} = {r:.6f} {to_unit}"
                except:
                    result_text = "Invalid input"

            for i, u in enumerate(unit_list):
                if from_rect.collidepoint(event.pos):
                    from_unit = u
                if to_rect.collidepoint(event.pos):
                    to_unit = u

        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_BACKSPACE:
                input_text = input_text[:-1]
            elif event.unicode.isdigit() or event.unicode in [".", "-"]:
                input_text += event.unicode

    # UI
    pygame.draw.rect(screen, INPUT_BG, input_rect)
    screen.blit(FONT.render(input_text or "Enter number", True, TEXT),
                (input_rect.x + 10, input_rect.y + 6))

    pygame.draw.rect(screen, PANEL, from_rect)
    screen.blit(FONT.render(from_unit, True, TEXT),
                FONT.render(from_unit, True, TEXT).get_rect(center=from_rect.center))

    pygame.draw.rect(screen, PANEL, to_rect)
    screen.blit(FONT.render(to_unit, True, TEXT),
                FONT.render(to_unit, True, TEXT).get_rect(center=to_rect.center))

    pygame.draw.rect(screen, ACCENT, convert_btn, border_radius=8)
    screen.blit(FONT.render("Convert", True, TEXT),
                FONT.render("Convert", True, TEXT).get_rect(center=convert_btn.center))

    pygame.draw.rect(screen, GREEN, result_rect, border_radius=8)
    screen.blit(FONT.render(result_text or "Result", True, TEXT),
                FONT.render(result_text or "Result", True, TEXT).get_rect(center=result_rect.center))

    pygame.display.flip()
    clock.tick(60)

pygame.quit()
sys.exit()