import pygame
import sys

# Initialize Pygame and create window
pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Freehand Drawing with Debug Info")
font = pygame.font.Font(None, 24)
clock = pygame.time.Clock()

# Data structures
shapes = []  # List of completed shapes; each is a dict with points and bbox
drawing = False
current_points = []  # List of points for the stroke being drawn

def compute_bounding_box(points):
    if not points:
        return None
    xs = [p[0] for p in points]
    ys = [p[1] for p in points]
    min_x, max_x = min(xs), max(xs)
    min_y, max_y = min(ys), max(ys)
    return (min_x, min_y, max_x - min_x, max_y - min_y)

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        # Begin drawing on mouse button down
        elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
            drawing = True
            current_points = [event.pos]
        # Append points as the mouse moves while drawing
        elif event.type == pygame.MOUSEMOTION and drawing:
            current_points.append(event.pos)
        # Finish the current stroke on mouse button release
        elif event.type == pygame.MOUSEBUTTONUP and event.button == 1:
            drawing = False
            bbox = compute_bounding_box(current_points)
            shapes.append({
                "points": current_points,
                "bbox": bbox
            })
            current_points = []

    # Clear screen
    screen.fill((30, 30, 30))

    # Draw completed shapes in white
    for shape in shapes:
        if len(shape["points"]) > 1:
            pygame.draw.lines(screen, (255, 255, 255), False, shape["points"], 2)
        if shape["bbox"]:
            pygame.draw.rect(screen, (255, 255, 255), shape["bbox"], 1)

    # Draw current shape (freehand drawing) in green
    if drawing and current_points:
        if len(current_points) > 1:
            pygame.draw.lines(screen, (0, 255, 0), False, current_points, 2)
        bbox = compute_bounding_box(current_points)
        if bbox:
            pygame.draw.rect(screen, (0, 255, 0), bbox, 1)

    # Debug Menu Info
    debug_lines = [
        f"Drawing: {drawing}",
        f"Current Points: {len(current_points)}",
        f"Shapes drawn: {len(shapes)}"
    ]
    if current_points:
        bbox = compute_bounding_box(current_points)
        debug_lines.append(f"Bounding Box: {bbox}")

    # Render debug text
    y_offset = 10
    for line in debug_lines:
        text_surface = font.render(line, True, (255, 255, 255))
        screen.blit(text_surface, (10, y_offset))
        y_offset += text_surface.get_height() + 5

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