import pygame



# Laternen durchgehen, abgleichen mit der Laterne die wir haben, sobald die in der gleichen Straße sind,
# findet ein Vergleich statt, die id der Laterne in der Kreuzung, die erste oder die letzte ist in der Straße
# Jenachdem werden dann die zwei folgenden Laternen angeschalten (id: 2 und 3) oder die zwei zuvorstehenden 
# Laternen (id: alte_id -1, alte_id - 2). Und jenachdem gedimmed geschaltet.

def light_street_when_in_intersection(lanterns, lantern_id, street):
    for lantern in lanterns:
        if lantern.street == street:
            if lantern_id == 1:
                if lantern.id == 2:
                    lantern.light_up(176, 179, 0, 255)
                if lantern.id == 3:
                    lantern.light_up(176, 179, 0, 128)
            else:
                if lantern.id == lantern_id - 1:
                    lantern.light_up(176, 179, 0, 255)
                if lantern.id == lantern_id - 2:
                    lantern.light_up(176, 179, 0, 128)


# Funktion um alle Laternen einer Kreuzung auf die gleiche Farbe/Helligkeit zu dimmen
def light_intersection_dimmed(lanterns, crossing_id, alpha):
    for lantern in lanterns:
        if lantern.crossing_id == crossing_id:
            lantern.light_up(176, 179, 0, alpha)


def check_sensor(collisions, lanterns):
    # Detektoren, welche aktiviert wurden durchgehen und mit allen Laternen abgleichen
    for detector in collisions:
            for lantern in lanterns:
                
                # Wenn Kreuzungsdetektor betreten wird, komplette Kreuzung aufleuchten lassen
                if detector.crossing_id == lantern.crossing_id and detector.crossing_id is not None:
                    lantern.light_up(255, 255, 0, 255)
                
                # Ankreuzende Straßen der Kreuzung, beleuchten  
                    light_street_when_in_intersection(lanterns, lantern.id, lantern.street)
                
                # Checken ob Laterne in der selben Straße steht, dann zum leuchten bringen falls straße und id gleich ist
                # Angrenzende Laternen anhand der id rausfinden und gedimmed anschalten
                if lantern.street == detector.street:
                
                # Checken ob direkte Nachbar Laterne oder Laterne an zweiter Stelle
                #Falls sich die Lampe in der Kreuzung befindet, soll die ganze Kreuzung gedimmed an sein
                    if lantern.id == detector.id - 1 or lantern.id == detector.id + 1:
                        lantern.light_up(176, 179, 0, 255)   
                        if lantern.crossing_id is not None:
                            light_intersection_dimmed(lanterns, lantern.crossing_id, 255)
                    if lantern.id == detector.id - 2 or lantern.id == detector.id + 2:
                        lantern.light_up(176, 179, 0, 128)
                        if lantern.crossing_id is not None:
                            light_intersection_dimmed(lanterns, lantern.crossing_id, 128)
                
                # Direkt zugehörige Laterne anmachen
                    if lantern.id == detector.id:
                        lantern.light_up(255, 255, 0, 255)

def scene_1(screen, detectors, streets, lanterns, player):
    screen.fill("Grey")  
    detectors.draw(screen)
    streets.draw(screen)
    lanterns.draw(screen)
    player.draw(screen)
    player.update()

    for lantern in lanterns:
        lantern.reset_light()

                # Check for collision and light up corresponding lantern
    collisions = pygame.sprite.spritecollide(player.sprite, detectors, False)
    check_sensor(collisions, lanterns)
                
    if pygame.sprite.spritecollide(player.sprite, streets, False):
                    player.sprite.set_back()#


def scene_2(screen, detectors, streets, lanterns, player):
    screen.fill("Pink")  
    detectors.draw(screen)
    streets.draw(screen)
    lanterns.draw(screen)
    player.draw(screen)
    player.update()

    for lantern in lanterns:
        lantern.reset_light()

                # Check for collision and light up corresponding lantern
    collisions = pygame.sprite.spritecollide(player.sprite, detectors, False)
    check_sensor(collisions, lanterns)
                
    if pygame.sprite.spritecollide(player.sprite, streets, False):
                    player.sprite.set_back()

def scene_3(screen, detectors, streets, lanterns, player):
    screen.fill("Pink")  
    detectors.draw(screen)
    streets.draw(screen)
    lanterns.draw(screen)
    player.draw(screen)
    player.update()

    for lantern in lanterns:
        lantern.reset_light()

                # Check for collision and light up corresponding lantern
    collisions = pygame.sprite.spritecollide(player.sprite, detectors, False)
    check_sensor(collisions, lanterns)
                
    if pygame.sprite.spritecollide(player.sprite, streets, False):
                    player.sprite.set_back()

def scene_4(screen, detectors, streets, lanterns, player):
    screen.fill("Pink")  
    detectors.draw(screen)
    streets.draw(screen)
    lanterns.draw(screen)
    player.draw(screen)
    player.update()

    for lantern in lanterns:
        lantern.reset_light()

                # Check for collision and light up corresponding lantern
    collisions = pygame.sprite.spritecollide(player.sprite, detectors, False)
    check_sensor(collisions, lanterns)
                
    if pygame.sprite.spritecollide(player.sprite, streets, False):
                    player.sprite.set_back()