# problem1solution.py
#
# ICS H32 Fall 2025
# Exercise Set 8
# INSTRUCTOR SOLUTION

import pygame


def _draw_text(surface: pygame.Surface, font: pygame.font.SysFont, text: str) -> None:
    text_image = font.render(text, True, pygame.Color(255, 255, 255))
    surface.blit(text_image, (10, 10))


def run() -> None:
    pygame.init()

    try:
        surface = pygame.display.set_mode((600, 600))
        font = pygame.font.SysFont(None, 24)
        clock = pygame.time.Clock()

        running = True

        keys = set()

        while running:
            clock.tick(30)
            
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    running = False
                    break
                elif event.type == pygame.KEYDOWN and 0 <= event.key <= 255:
                    key = chr(event.key).upper()

                    if '0' <= key <= '9' or 'A' <= key <= 'Z':
                        keys.add(key)
                elif event.type == pygame.KEYUP and 0 <= event.key <= 255:
                    key = chr(event.key).upper()

                    if '0' <= key <= '9' or 'A' <= key <= 'Z':
                        keys.discard(key)

            surface.fill(pygame.Color(128, 128, 128))

            key_text = ''.join(sorted(keys))

            _draw_text(surface, font, key_text)
            
            pygame.display.flip()
    finally:
        pygame.quit()


if __name__ == '__main__':
    run()
