# led_controller.py
import time
import sys
import RPi.GPIO as gpio
import board
import neopixel

# from client_handler import number_LED, onClient, screenplay, brightness


# Здесь определяются функции и классы для управления светодиодной лентой

PIXEL_PIN = board.D12  # Номер пина, к которому подключена светодиодная лента
ORDER = neopixel.RGB
COLOUR = [0, 0, 0]
RED = (255, 0, 0)  # Красный цвет светодиодной ленты
ORAGE = (230, 0, 57)  # Оранжевый цвет светодиодной ленты
BLUE = (0, 255, 0)  # Синий цвет светодиодной ленты
BLUENORD = (0, 155, 0)
GREEN = (0, 0, 255)  # Зеленый цвет светодиодной ленты
YELLOW = (255, 0, 101)  # Желтый цвет светодиодной ленты
PURPLE = (150, 225, 10)  # Фиолетовый цвет светодиодной ленты
CLEAR = (0, 0, 0)  # Отключение светодиодов
DELAYRGB = 0.1  # Время цвета на светодиодной ленте
flag_LEDRGB = True
from client_handler import onClient


def LEDRGB(number_LED, R, B, G, R2, B2,
           G2, screenplay_init):  # Сценарии светодиодной ленты во время воспроизведения видеофайла при запросе
    global screenplay
    from client_handler import pixel

    screenplay = screenplay_init
    time.sleep(.5)

    # global flag_LEDRGB

    COLOUR = [R, B, G]
    COLOUR2 = [R2, B2, G2]
    onClient("Запущенно воспроизведение светодиодной ленты")
    print("Запущенно воспроизведение светодиодной ленты\n")
    # client_socket.send("Запущенно воспроизведение светодиодной ленты".encode())
    # while flag_LEDRGB:
    while True:

        # time.sleep(1.5)

        if screenplay == 1:
            y = 0
            t = 0
            pixel.fill(COLOUR2)
            while y < number_LED and flag_LEDRGB:
                pixel[y] = (COLOUR)
                pixel[-y] = (COLOUR)
                y = y + 1
                time.sleep(DELAYRGB)

            while t < 10 and flag_LEDRGB:
                pixel.fill(COLOUR)
                time.sleep(DELAYRGB)
                pixel.fill(COLOUR2)
                time.sleep(DELAYRGB)
                t = t + 1

        elif screenplay == 2:
            y = 0
            t = 1
            pixel.fill(COLOUR2)
            while y < number_LED and flag_LEDRGB:
                pixel[y] = (COLOUR)
                y = y + 1
                time.sleep(0.05)
            while t < number_LED + 1 and flag_LEDRGB:
                pixel[-t] = (COLOUR2)
                t = t + 1
                time.sleep(0.05)

        elif screenplay == 3:
            y = 0
            t = 0
            x = 0
            pixel.fill(COLOUR2)
            while y < 11 and flag_LEDRGB:
                pixel[y] = (COLOUR)
                pixel[-y] = (COLOUR)
                y = y + 1
                time.sleep(DELAYRGB)
            while x < 11 and flag_LEDRGB:
                pixel[x] = (COLOUR2)
                pixel[-x] = (COLOUR2)
                x = x + 1
                time.sleep(DELAYRGB)

            while t < 22 and flag_LEDRGB:
                pixel.fill(COLOUR)
                time.sleep(DELAYRGB)
                pixel.fill(COLOUR2)
                time.sleep(DELAYRGB)
                t = t + 1

        elif screenplay == 4:
            y = 0
            t = 0
            x = 0
            pixel.fill(COLOUR2)
            while y < 11 and flag_LEDRGB:
                pixel[y] = (COLOUR)
                pixel[-y] = (COLOUR)
                y = y + 1
                time.sleep(DELAYRGB)
            while y < 22 and flag_LEDRGB:
                pixel[y] = (COLOUR2)
                pixel[-y] = (COLOUR2)
                y = y + 1
                time.sleep(DELAYRGB)

            while t < 11 and flag_LEDRGB:
                pixel.fill(COLOUR)
                time.sleep(DELAYRGB)
                pixel.fill(COLOUR2)
                time.sleep(DELAYRGB)
                t = t + 1

        elif screenplay == 5:
            y = 0
            t = 0
            x = 1
            pixel.fill(COLOUR2)
            while y < 22 and flag_LEDRGB:
                pixel[y] = (COLOUR)
                y = y + 1
                time.sleep(0.05)
            while t < 10 and flag_LEDRGB:
                pixel[18] = (COLOUR)
                pixel[19] = (COLOUR)
                pixel[20] = (COLOUR)
                pixel[21] = (COLOUR)

                time.sleep(DELAYRGB)
                pixel[18] = (COLOUR2)
                pixel[19] = (COLOUR2)
                pixel[20] = (COLOUR2)
                pixel[21] = (COLOUR2)
                time.sleep(DELAYRGB)
                t = t + 1
            pixel.fill(COLOUR)
            while x < 24 and flag_LEDRGB:
                pixel[-x] = (COLOUR2)
                x = x + 1
                time.sleep(0.05)

        elif screenplay == 6:

            pixel.fill(COLOUR)
            time.sleep(DELAYRGB)
            pixel.fill(COLOUR2)
            time.sleep(DELAYRGB)


        elif screenplay == 7:
            y = 0
            pixel.fill(COLOUR2)
            while y < number_LED - 1 and flag_LEDRGB:
                pixel.fill(COLOUR2)
                pixel[y] = (COLOUR)
                pixel[y + 1] = (COLOUR)
                y = y + 1
                time.sleep(DELAYRGB)

        elif screenplay == 8:
            y = 0
            t = 0
            pixel.fill(COLOUR2)
            while y < 16 and flag_LEDRGB:
                pixel.fill(COLOUR2)
                pixel[y] = (COLOUR)
                pixel[y + 1] = (COLOUR)
                y = y + 1
                time.sleep(0.005)
            pixel.fill(COLOUR2)
            while t < 12 and flag_LEDRGB:
                pixel[19] = (COLOUR)
                pixel[20] = (COLOUR)
                pixel[21] = (COLOUR)
                pixel[22] = (COLOUR)

                time.sleep(DELAYRGB)

                pixel[19] = (COLOUR2)
                pixel[20] = (COLOUR2)
                pixel[21] = (COLOUR2)
                pixel[22] = (COLOUR2)
                time.sleep(0.05)
                t = t + 1
        elif screenplay == 9:
            y = 0
            while y < number_LED and flag_LEDRGB:
                pixel[y] = (COLOUR)
                y = y + 1
                time.sleep(0.05)
            while True and flag_LEDRGB:
                pixel.fill(COLOUR)
        elif screenplay == 10:
            t = 1
            while t < number_LED + 1 and flag_LEDRGB:
                pixel[-t] = (CLEAR)
                t = t + 1
                time.sleep(0.05)

    pixel.fill(CLEAR)
    onClient("Закончено воспроизведение светодиодной ленты")
    print("Закончено воспроизведение светодиодной ленты\n")
    # client_socket.send("Закончено воспроизведение светодиодной ленты".encode())


def waitingmode_start(R_wait, B_wait, G_wait, R2_wait, B2_wait,
                      G2_wait):  # Сценарий старта ждущего режима светодиодной ленты
    from client_handler import number_LED, pixel
    color = [R_wait, B_wait, G_wait]
    color2 = [R2_wait, B2_wait, G2_wait]

    y = 0
    while y < (number_LED - 1):  # 22
        # pixel[y] = (color)
        y = y + 1
        time.sleep(0.05)
    # pixel.fill(color)


def waitingmode_fin(R_wait, B_wait, G_wait, R2_wait, B2_wait,
                    G2_wait):  # Сценарий финиша ждущего режима светодиодной ленты
    color = [R_wait, B_wait, G_wait]
    color2 = [R2_wait, B2_wait, G2_wait]
    from client_handler import number_LED, pixel

    t = 1
    while t < (number_LED + 1):
        if (t == number_LED):
            # pixel[0] = (CLEAR)
            t = t + 1
            time.sleep(0.05)
        else:
            # pixel[-t] = (CLEAR)
            t = t + 1
            time.sleep(0.05)
    # pixel.fill(CLEAR)


def errorindicator():  # Сценарий ошибки светодиодной ленты
    from client_handler import pixel
    counter = 0
    while counter < 16:
        # pixel.fill(YELLOW)
        time.sleep(DELAYRGB)
        # pixel.fill(RED)
        time.sleep(DELAYRGB)
        counter += 1
    pixel.fill(RED)
    time.sleep(15)
    sys.exit()
