<?php

namespace App\Traits;


use Throwable;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;

trait Favouritable
{

    public static function bootFavouritable()
    {

        static::deleting(function ($item) {
            try {

                self::deleteFavourites($item);


                /* if (DB::transactionLevel() > 0) {

                    DB::afterCommit(function () use ($item) {
                        self::deleteFavourites($item);
                    });
                } else {
                    self::deleteFavourites($item);
                } */
            } catch (Throwable $t) {
                Log::error($t);
            }
        });
    }

    /**
     * Deletes all favourites for the item being deleted
     */
    private static function deleteFavourites($item)
    {
        DB::table('favourites')
            ->where('favourite_id', $item->id)
            ->where('favourite_type', get_class($item))
            ->delete();
    }
}
