import pygame # Packet laden
import sys
import random
import math

pygame.init() # Muss immer bei der Verwendung von Pygame am Anfang gemacht werden zur internen Initialisierung

# Fenstergrösse definieren
width = 700
height = 500
screen = pygame.display.set_mode((width, height))
center_point = (round(width/2), round(height/2))

pygame.display.set_caption("Mein Erstes Pygame Programm")

# Farben definieren mit RGB Wert
white = (255, 255, 255)
yellow = (255, 255, 0)
red = (255, 0, 0)
orange = (255, 100, 0)
black = (0, 0, 0)
green = (0, 255, 0)
darkgreen = (0, 150, 0)
blue = (0, 0, 255)

# Zeitmesser einführen
clock = pygame.time.Clock()

# Anzahl Frames
frame_count = 0

# Sonne Koordinaten
sonne_x = 550
sonne_y = 50
bewegung_x = 2
bewegung_y = 2
radius_sonne = 40
sonne_max = 50 # maximale Höhe
sonne_min = 300 # minimale Höhe

def farbe_skaliert(farbe, faktor, ref_farbe = (0,0,0)):
    skalierte_farbe = []
    for i in range(3):
        neuer_farbwert = round(farbe[i] + (ref_farbe[i] - farbe[i]) * faktor_farbe)
        if neuer_farbwert > 255:
            skalierte_farbe.append(255)
        elif neuer_farbwert < 0:
            skalierte_farbe.append(0)
        else:
            skalierte_farbe.append(neuer_farbwert)
    return tuple(skalierte_farbe)

import math

def next_point_on_circle(x, y, R, tot_steps, center_point):
    """
    Gibt die Koordinaten eines Punktes nach einem Zeitschritt entlang eines Kreises mit Radius R zurück,
    der um center_point zentriert ist.

    Parameter:
    - x, y: Koordinaten des aktuellen Punktes.
    - R: Radius des Kreises.
    - tot_steps: Gesamtzahl der Schritte, um den Kreis zu vervollständigen.
    - center_point: Ein Tupel (center_x, center_y), das die Koordinaten des Kreismittelpunkts darstellt.

    Rückgabe:
    - (new_x, new_y): Koordinaten des Punktes nach einem Zeitschritt.
    """

    # Todo: berechne die neuen Koordinaten new_x und new_y, damit die Sonne um einen Schritt weiter im Kreis mit Radius R bewegt
    new_x = x
    new_y = y

    return new_x, new_y




while True:
    for event in pygame.event.get():
        # If the player clicks the red 'x', it is considered a quit event
        if event.type == pygame.QUIT:
            pygame.quit() # Gegenteil von pygame.init()
            sys.exit() # Programm regulär beenden

    frame_count += 1

    # Berechne Sonnenkoordinaten
    sonne_x, sonne_y = next_point_on_circle(sonne_x, sonne_y, 270, 250, center_point)

    # Berechne Skalierungsfaktor anhand von Sonne
    faktor_farbe = (sonne_y - 50) / (sonne_min - sonne_max)

    # HINTERGRUND MUSS VOR DEN GEOMETRISCHEN OBJEKTEN GEZEICHNET WERDEN
    screen.fill(farbe_skaliert((150, 150, 255), faktor_farbe, red))

    # Zeichne Sonne
    pygame.draw.circle(screen, orange, (sonne_x, sonne_y), radius_sonne)

    # Zeichne Grass
    # Variante 1: erstelle Rechteck-Objekt und zeichne dieses
    rechteck = pygame.Rect(0, 300, 700, 500)
    pygame.draw.rect(screen, farbe_skaliert(green, faktor_farbe), rechteck)
    # Variante 2: zeichne Rechteck direkt
    # pygame.draw.rect(screen, green, (0, 300, 700, 500))

    # Zeichne Haus
    pygame.draw.rect(screen, farbe_skaliert(blue, faktor_farbe), (150, 150, 300, 200))
    pygame.draw.polygon(screen, farbe_skaliert(red, faktor_farbe), [(150, 150), (300, 50), (450, 150)])  # Dach
    pygame.draw.rect(screen, farbe_skaliert(darkgreen, faktor_farbe), (250, 250, 50, 100))  # Türe
    pygame.draw.circle(screen, black, (260, 300), 5)  # Türgriff

    # pygame vollständig updaten
    pygame.display.update()

    clock.tick(60) # while-Schleife soll nicht öffters als 60 mal pro Sekunde ausgeführt werden.



