@extends("app.layout.base")

@section("title")
    Booking Liste
@endsection

@section("content")
    <style>
        option {
            color: black;
        }
    </style>
    <main style="justify-content: unset">
        <h1 class="text-center sde-blue mb-0">{{__('msg.bookingliste')}}</h1>
        {!! session()->get('ReservationExists') !!}
        <div class="col w-100 mt-1">
            <div class="calendar-container">
                <div class="calendar-container__header">
                    <button id="week-previous" class="calendar-container__btn fas fa-arrow-left" title="Previous">
                        <i class="icon ion-ios-arrow-back"></i>
                    </button>
                    <h2 id="title" class="calendar-container__title">{Måned} {År}</h2>
                    <button id="week-next" class="calendar-container__btn fas fa-arrow-right" title="Next">
                        <i class="icon ion-ios-arrow-forward"></i>
                    </button>
                </div>
                <div class="calendar-container__body">
                    <div id="calendar" class="calendar-table">
                        <div class="calendar-table__body">
                        </div>
                    </div>
                </div>
            </div>
            <form method="post" action="{{ route("washing-reservations.store") }}" id="event-container" class="events-container">
                @csrf
            </form>
            @if(count(\App\WashingMachine::all()) < 1)
                <p style="margin: 0 18px;">{{__('msg.dereringenvaskemaskiner')}}.</p>
            @endif
        </div>
    </main>
@endsection

@section("scripts")
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.27.0/moment-with-locales.min.js" integrity="sha512-qSnlnyh7EcD3vTqRoSP4LYsy2yVuqqmnkM9tW4dWo6xvAoxuVXyM36qZK54fyCmHoY1iKi9FJAUZrlPqmGNXFw==" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.27.0/locale/da.min.js" integrity="sha512-rybyYvSnwg3zAZ/vjTTMoh8tOK0Z6tC2XCzr9e27M0xr8WU40IGo6SOP7FXXCyWgMyd3wZ8ln2nY4ce1ysYUfw==" crossorigin="anonymous"></script>
    <script>
        function generateCalendar(weekOffset = 0) {
            const week = (moment().week() + weekOffset);

            let weekDays = Array.apply(null, Array(7)).map((value, index) => {
                return moment(index, "e").locale("da").startOf("week").weekday(index).format("ddd");
            });

            document.getElementById("title").innerHTML = '{{__('msg.ugestor')}} ' + moment().locale("da").day(weekDays[0]).week(week).isoWeek().toString();

            const calendar = document.getElementById("calendar");

            let header = document.createElement("div");
            header.classList.add("calendar-table__header", "calendar-table__row");

            let calendarBody = document.createElement("div");
            calendarBody.classList.add("calendar-table__body");

            let calendarRow = document.createElement("div");
            calendarRow.classList.add("calendar-table__row")
            calendarRow.id = "calenderRow";

            weekDays.forEach(function (weekDay) {
                let headerDay = document.createElement("div");
                headerDay.classList.add("calendar-table__col");

                headerDay.innerText = weekDay;

                header.appendChild(headerDay);

                let date = moment().locale("da").day(weekDay).week(week);
                var datetext = moment().locale("da").day(weekDay).week(week).year() + "-" + prependZero((moment().locale("da").day(weekDay).week(week).month() + 1)) + "-" + prependZero(moment().locale("da").day(weekDay).week(week).date());

                let dayHolder = document.createElement("div");
                dayHolder.classList.add("calendar-table__col");

                let day = document.createElement("div");
                day.classList.add("calendar-table__item");
                day.innerText = date.date();

                dayHolder.appendChild(day);

                dayHolder.onclick = function() {
                    onDateSelect(date, dayHolder, datetext);
                }

                calendarRow.appendChild(dayHolder);
            });

            calendarBody.appendChild(calendarRow);

            calendar.innerHTML = "";

            calendar.appendChild(header);
            calendar.appendChild(calendarBody);
        }

        function onDateSelect(date, dayHolder, datetext) {
            let events;
            let locationz;
            let machinez;
            let buttonz;

            let container = document.getElementById("event-container");

            NodeList.prototype.forEach = Array.prototype.forEach;
            var children = document.getElementById("calenderRow").childNodes;

            children.forEach(function(item){
                item.classList.remove("selected");
            });

            dayHolder.classList.add("selected");

            let machine_id;
            let location_id;

            if(document.getElementById('washing-machines'))
                machine_id = document.getElementById('washing-machines').value;
            else
                machine_id = 0;

            if(document.getElementById('locations'))
                location_id = document.getElementById('locations').value;
            else
                location_id = 0;

            axios({
                method: 'get',
                url: '{{ route("washing-reservations.api") }}',
                params: { 'date': date, 'machine_id': machine_id, 'datetext': datetext, 'location_id': location_id }
            }).then(function (response) {
                var data = response.data;


                if(document.getElementById("locations") != undefined)
                    locationz = document.getElementById("locations");
                else {
                    let span = document.createElement("span");
                    span.classList.add("events__title");
                    span.innerText = "{{__('msg.lokation')}}";

                    let select = document.createElement("select");
                    select.classList.add("events__title");
                    select.id = "locations";
                    select.name = "location_id";

                    select.onchange = function() {
                        onDateSelect(date, dayHolder, datetext);
                    }

                    container.appendChild(span);
                    container.appendChild(select);

                    locationz = document.getElementById("locations");
                }
                if(document.getElementById("washing-machines") != undefined)
                    machinez = document.getElementById("washing-machines");
                else {
                    let span = document.createElement("span");
                    span.classList.add("events__title");
                    span.innerText = "{{__('msg.maskiner')}}";

                    let select = document.createElement("select");
                    select.classList.add("events__title");
                    select.id = "washing-machines";
                    select.name = "machine_id";

                    select.onchange = function() {
                        onDateSelect(date, dayHolder, datetext);
                    }

                    container.appendChild(span);
                    container.appendChild(select);

                    machinez = document.getElementById("washing-machines");
                }
                if(document.getElementById("events") != undefined)
                    events = document.getElementById("events");
                else {
                    let span = document.createElement("span");
                    span.classList.add("events__title");
                    span.innerText = "{{__('msg.tilgængeligetider')}}";

                    let select = document.createElement("select");
                    select.classList.add("events__title");
                    select.id = "events";
                    select.name = "time";

                    container.appendChild(span);
                    container.appendChild(select);

                    events = document.getElementById("events");
                }
                if(document.getElementById("create-reservation") != undefined)
                    buttonz = document.getElementById("create-reservation");
                else {
                    let button = document.createElement("button");

                    button.id = "create-reservation";
                    button.innerText = "{{__('msg.reserver')}}";
                    button.classList.add("btn", "btn-sde-blue")
                    button.type = "submit";

                    container.appendChild(button);

                    buttonz = document.getElementById("events");
                }

                let locations = data["locations"];

                locationz.innerHTML = "";
                locationz.onchange = function () {
                    onDateSelect(date, dayHolder, datetext);
                }

                for (let i = 0; i < locations.length; i++) {
                    let option = document.createElement("option");
                    option.text = locations[i]["name"];
                    option.value = locations[i]["id"];

                    if(location_id == locations[i]["id"])
                        option.selected = "selected";

                    locationz.appendChild(option);
                }

                let machines = data["washingmachines"];

                machinez.innerHTML = "";
                machinez.onchange = function () {
                    onDateSelect(date, dayHolder, datetext);
                }

                for (let i = 0; i < machines.length; i++) {
                    let option = document.createElement("option");
                    option.text = machines[i]["name"];
                    option.value = machines[i]["id"];

                    if(machine_id == machines[i]["id"])
                        option.selected = "selected";

                    machinez.appendChild(option);
                }

                events.innerHTML = "";
                for (let hour = 8; hour <= 20; hour++) {
                    let value = datetext + " " + prependZero(hour) + ":00:00";

                    let option = document.createElement("option");

                    option.text = prependZero(hour) + ":00";
                    option.value = value;
                    option.id = value;
                    events.appendChild(option);
                }

                let unavailable_times = data["unavailable_times"];

                unavailable_times.forEach(function (item, index) {
                    document.getElementById(item).remove();
                });

                if(events.childElementCount == 0){
                    let option = document.createElement("option");
                    option.disabled = "disabled";
                    option.text = "Der er ingen tilgængelige tider";
                    option.selected = "selected";
                    events.appendChild(option);

                    document.getElementById("create-reservation").disabled = "disabled";
                } else {
                    document.getElementById("create-reservation").disabled = "";
                }
            });
        }

        function prependZero(value) {
            if(value < 10)
                return "0" + value;
            return value;
        }

        let weekOffset = 0;

        if(document.getElementById("calendar")) {
            generateCalendar();

            document.getElementById("week-previous").onclick = function () {
                if(weekOffset > 0)
                {
                    weekOffset--;
                    generateCalendar(weekOffset);
                }
            }

            document.getElementById("week-next").onclick = function () {
                weekOffset++;
                generateCalendar(weekOffset);
            }
        }
    </script>
@endsection