#include "Schlauch.h"
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <string>
#include <conio.h>
#include <windows.h>
#include <stdio.h>

using namespace std;

Schlauch::Schlauch(Lichteffekt lichteffekt)
{
    this->sekundenTaktIstGerade = true;
    this->lichteffekt = lichteffekt;
    lampen = new Lampe[36];
    for(int i = 0; i < 36; i++)
    {
        lampen[i] = *new Lampe();
    }

    lichteffekt3_durchgaenge = 0;
}





int Schlauch::generateNumberBetweenOneAndHundred()
{
    //srand(time(NULL));
    return rand()% 100 + 1;
}


Lichteffekt Schlauch::getLichteffekt()
{
    return lichteffekt;
}

void SetCurorPosition(int column, int line)
{
    COORD coord;
    coord.X = column;
    coord.Y = line;
    SetConsoleCursorPosition(
        GetStdHandle(STD_OUTPUT_HANDLE),
        coord
    );

}
void Schlauch::Leuchten()
{
    if(lichteffekt == Lichteffekt2)
        sekundenTaktIstGerade = !sekundenTaktIstGerade;

    string ausgabe = "";

    for(int i = 0; i < 36; i++)
    {
        bool mussGeschaltetWerden = false;
        switch(this->lichteffekt)
        {
            case Lichteffekt1:
                mussGeschaltetWerden = true;
                break;
            case Lichteffekt2:
                mussGeschaltetWerden = sekundenTaktIstGerade ? i % 2 == 0 : i % 2 != 0;
                break;
            case Lichteffekt3:
                // Nur jede vierte Lampe
                mussGeschaltetWerden = i % 4 == lichteffekt3_durchgaenge;

                break;
            case Lichteffekt4:
                // 50% Chance das Lampe leuchtet
                mussGeschaltetWerden = generateNumberBetweenOneAndHundred() <= 50;
                break;
            case Lichteffekt5:
                break;
            default:
                break;
        }

        // Alles was nicht geschaltet werden muss, kann auch ausgeschaltet werden
        if(!mussGeschaltetWerden)
        {
            lampen[i].Ausschalten();
            ausgabe += "0";
        }
        else
        {
            if(lampen[i].Einschalten())
                ausgabe += "1";
            else
                ausgabe += "0";
        }

    }
    if(lichteffekt == Lichteffekt3)
        lichteffekt3_durchgaenge++;

    if(lichteffekt3_durchgaenge > 3)
        lichteffekt3_durchgaenge = 0;

    SetCurorPosition(0,3);
    cout << ausgabe;

}

