<?php

namespace App\Models\Shop;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\SoftDeletes;
use Wildside\Userstamps\Userstamps;
use Znck\Eloquent\Relations\BelongsToThrough as RelationsBelongsToThrough;
use Znck\Eloquent\Traits\BelongsToThrough;

class PriceListValue extends Model
{
    use BelongsToThrough, SoftDeletes, Userstamps;

    protected $guarded = ['id'];

    protected $table = 'shop_price_list_values';

    public function price_list(): BelongsTo
    {
        return $this->belongsTo(PriceList::class);
    }

    public function tariff(): RelationsBelongsToThrough
    {
        return $this->belongsToThrough(
            Tariff::class,
            PriceList::class,
            null,
            '',
            [
                'App\Models\Shop\Tariff' => 'tariff_id',
                'App\Models\Shop\PriceList' => 'price_list_id',
            ]
        );
    }

    public function vat(): BelongsTo
    {
        return $this->belongsTo(Tax::class, 'tax_id');
    }

    public function scopeByPriceList($query, $id)
    {
        return $query->where($this->table.'.price_list_id', $id);
    }

    public function scopeByQuantity($query, $quantity)
    {
        return $query->orderBy('quantity', 'desc')->where($this->table.'.quantity', '<=', $quantity)->first();
    }

    public function scopeBySaleChannel($query, $sale_channel_id)
    {
        return $query->with([
            'price_list' => function ($query) use ($sale_channel_id) {
                return $query->bySaleChannel($sale_channel_id);
            },
        ]);
    }
}
