<?php  namespace App\Models;  use App\Observers\DiscountObserver; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Relations\HasMany;  class Discount extends Model { 	public const COUPON_CODE_DISCOUNT = 2; 	public const GENERAL_DISCOUNT = 3; 	public const ABOVE_SET_PRICE_DISCOUNT = 4; 	public const CLUB_POINTS_DISCOUNT = 5; 	public const SAME_PRODUCT_MULTIPLE_TIMES_DISCOUNT = 6; 	public const GIFT_CODE_DISCOUNT = 7;  	protected $casts = [ 		'period-from' => 'date', 		'period-to' => 'date', 		'active' => 'boolean', 		'type' => 'integer', 		'is_percentage' => 'boolean', 		'add_up_with_other_discounts' => 'boolean', 	];  	public function items(): HasMany{}  	public static function getDiscountTypes(): array 	{ 		return [ 			self::COUPON_CODE_DISCOUNT, 			self::GENERAL_DISCOUNT, 			self::ABOVE_SET_PRICE_DISCOUNT, 		]; 	}  	public function getDiscountItemsIds(string $selfClass): array{}  	public function storeDiscountItems(): void{}  	public function isAvailable(): bool{}  	public function isCouponCodeAvailable(): bool{}  	public function isActiveDatesWise(): bool{}  	public function scopeAvailable(Builder $query): Builder{}  	public function scopeApplicable(object $query, array $types): Builder{}  	public function doesAddUp(): bool{}  	public function isPercentage(): bool{}  	public function getType(): string{}  	public function getEditViewPath(): string{}  	final public static function checkoutApplicableDiscounts(): array 	{ 		// ORDER OF DISCOUNTS MATTERS 		return [ 			self::GENERAL_DISCOUNT, 			self::COUPON_CODE_DISCOUNT, 			self::CLUB_POINTS_DISCOUNT, 			self::SAME_PRODUCT_MULTIPLE_TIMES_DISCOUNT, 		]; 	}  	public function scopeTypeCouponCode(Builder $query): Builder{}  	public function checkCouponCodeMaxTimesIsUsed(): int{}  	public function checkGiftCodeMaxTimesIsUsed(): int{}  	public function orderItems(): HasMany{}  	public function orderDiscounts(): HasMany{}  	public function canShowUsedList(): bool{}  	protected static function initObservers(): ?string 	{ 		return DiscountObserver::class; 	} }