<?php

use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

use App\Models\Base\Division;
use App\Repositories\Guest\SaleRepository;

class SaleRepositoryTest extends TestCase
{
    use DatabaseTransactions;

    public function testGetTodaysPubSales()
    {
        $pub = Division::where('name', 'Pub')->first();

        $entry = factory(\App\Models\Guest\Sale::class)->create();
        $cat = $entry->product->group->category;
        $cat->division()->associate($pub);
        $cat->save();

        $repo = new SaleRepository;

        $sales = $repo->getTodaysPubSales();

        $this->assertEquals(1, $sales->count());
    }

    public function testCalculateDiscount()
    {
        $entry = factory(\App\Models\Guest\Sale::class)->create();
        $product = $entry->product;
        $product->is_discountable = true;
        $product->save();

        $repo = new SaleRepository;

        $discount = $repo->getDiscountFor($entry->booking_id);

        $this->assertEquals($entry->total_in_default_currency * 0.2, $discount);
    }

    public function testGetTodaysPubCashSalesTotal()
    {
        $pub = Division::where('name', 'Pub')->first();

        $booking = factory(\App\Models\Guest\Booking::class, 'WA')->create();

        $entry = factory(\App\Models\Guest\Sale::class)->create();
        $entry->booking()->associate($booking);
        $entry->save();

        $cat = $entry->product->group->category;
        $cat->division()->associate($pub);
        $cat->save();

        $repo = new SaleRepository;

        $sales = $repo->getPubCashSalesTotal(\Carbon\Carbon::now('UTC')->subDays(10), \Carbon\Carbon::now('UTC'));

        $this->assertEquals($sales, $entry->total_in_default_currency);
    }

    public function testGetTodaysPubCashSales()
    {
        $pub = Division::where('name', 'Pub')->first();

        $booking = factory(\App\Models\Guest\Booking::class, 'WA')->create();

        $entry = factory(\App\Models\Guest\Sale::class)->create();
        $entry->booking()->associate($booking);
        $entry->save();

        $cat = $entry->product->group->category;
        $cat->division()->associate($pub);
        $cat->save();

        $repo = new SaleRepository;

        $sales = $repo->getPubCashSales(\Carbon\Carbon::now('UTC')->subDays(10), \Carbon\Carbon::now('UTC'));

        $this->assertEquals(1, $sales->count());
        $this->assertEquals($sales->sum('total_in_default_currency'), $entry->total_in_default_currency);
    }
}
