<?php

namespace Tests\Unit;

use Tests\TestCase;

use App\Models\Calendar;
use App\Models\GoogleCalendar;
use Tests\Unit\PageLinkTestTrait;

class CalendarTest extends TestCase
{
    use PageLinkTestTrait;

    protected function getModel()
    {
        return $this->createContentElement(Calendar::factory())->content;
    }

    protected function getLinkFields()
    {
        return [
            'body',
        ];
    }

    public function test_a_calendar_has_many_google_calendars()
    {
        $calendar = Calendar::factory()->has(GoogleCalendar::factory())->create();
        $this->assertNotNull($calendar->googleCalendars);
        $google_calendar = $calendar->googleCalendars->first();
        $this->assertInstanceOf(GoogleCalendar::class, $google_calendar);
        $this->assertEquals($google_calendar->calendar->id, $calendar->id);
    }

    public function test_a_google_calendar_can_filter_by_regex(): void
    {
        $calendar = Calendar::factory()->has(GoogleCalendar::factory())->create();
        $this->assertNotNull($calendar->googleCalendars);
        $google_calendar = $calendar->googleCalendars->first();

        $events = $google_calendar->getCalendarEvents()->take(2);
        $find_event = $events->first();
        $dont_find_event = $events->last();
        $this->assertNotNull($find_event);
        $this->assertNotNull($dont_find_event);

        $filter = collect(explode(' ', $find_event->title))->filter(function ($word) {
            return strlen($word) > 4;
        })->random();

        $this->assertNotNull($filter);

        $google_calendar->filter = $filter;
        $google_calendar->save();
        cache()->flush();
        $google_calendar->refresh();

        $this->assertTrue($google_calendar->getCalendarEvents()->contains('id', $find_event->id));
        $this->assertFalse($google_calendar->getCalendarEvents()->contains('id', $dont_find_event->id));
    }
}
