import pygame
import math
import sys

# --- Pygame setup ---
pygame.init()
WIDTH, HEIGHT = 800, 800
screen = pygame.display.set_mode((WIDTH, HEIGHT))
clock = pygame.time.Clock()

# --- Colors ---
BLACK = (0, 0, 0)
colors = [(255, 100, 100), (100, 255, 150), (100, 150, 255), (255, 255, 100)]

# --- Fibonacci sequence generator ---
def fibonacci(n):
    fibs = [0, 1]
    for i in range(2, n):
        fibs.append(fibs[-1] + fibs[-2])
    return fibs

# --- Spiral drawing ---
def draw_fibonacci_spiral(n, angle_offset):
    fibs = fibonacci(n)
    cx, cy = WIDTH//2, HEIGHT//2
    scale = 0.05  # scale down Fibonacci numbers to fit screen

    for i, f in enumerate(fibs[1:], 1):  # skip the first 0
        angle = i * 137.5 + angle_offset  # golden angle in degrees
        rad = math.radians(angle)
        x = cx + f * math.cos(rad) * scale
        y = cy + f * math.sin(rad) * scale
        color = colors[i % len(colors)]
        pygame.draw.circle(screen, color, (int(x), int(y)), max(int(f*scale*0.5)+2, 2))

# --- Main loop ---
angle_offset = 0
running = True
while running:
    screen.fill(BLACK)
    draw_fibonacci_spiral(50, angle_offset)
    angle_offset += 1  # rotate the spiral over time

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

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

pygame.quit()
sys.exit()