<?php

namespace Tests\Unit;

use Tests\TestCase;
use Illuminate\Support\Arr;

use App\Models\InquiryForm;
use App\Models\Livestream;
use App\Models\Tag;

class InquiryFormTest extends TestCase
{
    public function test_an_inquiry_form_has_a_livestreams_attribute()
    {
        $inquiry_form = InquiryForm::factory()->create();
        $livestream = Livestream::factory()->create();
        $past_livestream = Livestream::factory()->create([
            'start_date' => now()->subDays(1),
        ]);

        $this->assertNotNull($inquiry_form->livestreams);
        $this->assertTrue($inquiry_form->livestreams->contains('id', $livestream->id));
        $this->assertFalse($inquiry_form->livestreams->contains('id', $past_livestream->id));

        $tag = Tag::factory()->create();
        $livestream2 = Livestream::factory()->create();

        $inquiry_form->addTag($tag);
        $livestream2->addTag($tag);

        $inquiry_form->refresh();

        $this->assertTrue($inquiry_form->livestreams->contains('id', $livestream2->id));
        $this->assertFalse($inquiry_form->livestreams->contains('id', $livestream->id));

        $data = InquiryForm::find($inquiry_form->id)->toArray();
        $this->assertNotNull(Arr::get($data, 'livestreams'));
    }

    public function test_inquiry_form_livestreams_include_certain_dates()
    {
        $inquiry_form = InquiryForm::factory()->create();
        $active_livestream = Livestream::factory()->create([
            'start_date' => now()->subMinutes(15),
            'length' => 30,
        ]);

        $past_livestream = Livestream::factory()->create([
            'start_date' => now()->subMinutes(60),
            'length' => 30,
        ]);

        $no_end_time_livestream = Livestream::factory()->create([
            'start_date' => now()->subMinutes(15),
            'length' => null,
        ]);

        $this->assertNotNull($inquiry_form->livestreams);
        $this->assertTrue($inquiry_form->livestreams->contains('id', $active_livestream->id));
        $this->assertTrue($inquiry_form->livestreams->contains('id', $no_end_time_livestream->id));
        $this->assertFalse($inquiry_form->livestreams->contains('id', $past_livestream->id));
    }
}
