<?php

namespace App\Http\Livewire;

use Livewire\Component;

class CalendarRemove extends Component
{
    public $records;
    public $groups = [];
    
    public $data = [];

    public function render()
    {
        $this->records = [];
        $this->groups = [];

        $calendars = \App\Models\Calendar::orderBy('from')->get();
        foreach($calendars as $calendar)
        {
            $days = ['dom', 'lun', 'mar', 'mer', 'gio', 'ven', 'sab'];
            $dow = date('w', strtotime($calendar->from));
            $d = $days[$dow];

            $h = date('H:i', strtotime($calendar->from));

            // Elenco corsi per tipologia in base al calendario
            $courses = \App\Models\Course::where('name', $calendar->name)->where('date_from', '<=', $calendar->from)->where('date_to', '>=', $calendar->to)->pluck('id')->toArray();

            $months = date("n", strtotime($calendar->from));

            $members_count = \App\Models\MemberCourse::query()
                        ->whereRaw("JSON_CONTAINS(`when`, JSON_OBJECT('day', JSON_ARRAY(?), 'from', ?), '$')", [$d, $h])
                        ->whereRaw("JSON_CONTAINS(months, JSON_OBJECT('m', CAST(? AS UNSIGNED)), '$')", [$months])
                        ->whereRaw("NOT JSON_CONTAINS(months, JSON_OBJECT('m', CAST(? AS UNSIGNED), 'status', 2), '$')", [$months])
                        ->whereRaw("NOT JSON_CONTAINS(months, JSON_OBJECT('m', CAST(? AS UNSIGNED), 'status', '2'), '$')", [$months])
                        ->whereIn('course_id', $courses)
                        ->count();
            
            if ($members_count == 0)
            {

                $hour = date("H:i", strtotime($calendar->from));

                $x = ($calendar->course ? ($calendar->course->name . " ") : "") . $d . " " . $hour;
                
                if (!in_array($x, $this->groups)) {
                    $this->groups[] = $x;

                    if ($calendar->course) {
                        if (!isset($this->data[$calendar->course->name])) {
                            $this->data[$calendar->course->name] = [];
                        }
                        $this->data[$calendar->course->name][$dow][] = [
                            'calendar_id' => $calendar->id,
                            'grp' => $x,
                            'hour' => $hour,
                        ];
                    }
                }

                $this->records[] = array('id' => $calendar->id, 'date' => date("d/m/Y", strtotime($calendar->from)), "name" => $calendar->name, "hour" => $hour, "day" => $d);
            }

        }

        // ordinamento corsi/giorni/ore
        ksort($this->data, SORT_STRING);
        foreach ($this->data as &$days) {
            ksort($days, SORT_NUMERIC);
            foreach($days as &$times) {
                usort($times, function ($a, $b) {
                    return strtotime($a['hour']) <=> strtotime($b['hour']);
                });
            }
        }
        unset($days, $times);

        return view('livewire.calendar_remove');
    }

    public function removeSelected($ids)
    {

        foreach($ids as $id)
        {
            \App\Models\Calendar::findOrFail($id)->delete();
        }
        return redirect()->to('/calendar_remove');        

    }


}
