<?php

namespace App\Interfaces;

interface SupplierItem
{
	/* RELATIONS */

	/**
	 * Supplier that provides this offering
	 *
	 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
	 */
	public function supplier_detail();

	/**
	 * Available products created from this supplier offering
	 *
	 * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
	 */
	public function types();

	/* ATTRIBUTES */

	/**
	 * Return the billing interval base cost including tax
	 *
	 * @return float
	 */
	public function getBaseCostTaxableAttribute(): float;

	/**
	 * Return the billing interval that the supplier charges
	 *
	 * @return string
	 */
	public function getBillingIntervalAttribute(): int;

	/**
	 * The term that the supplier imposes on this service being connected
	 *
	 * @return int
	 */
	public function getContractTermAttribute(): int;

	/**
	 * The minimum cost of ordering this offering
	 *
	 * @return float
	 */
	public function getMinCostAttribute(): float;

	/**
	 * The minimum cost of ordering this offering including taxes
	 *
	 * @return float
	 */
	public function getMinCostTaxableAttribute(): float;

	/**
	 * Suppliers offering name (short)
	 *
	 * @return string
	 */
	public function getNameAttribute(): string;

	/**
	 * Suppliers offering name (long)
	 *
	 * @return string
	 */
	public function getNameLongAttribute(): string;

	/**
	 * Return the setup cost including tax
	 *
	 * @return float
	 */
	public function getSetupCostTaxableAttribute(): float;

	/**
	 * Return the type of offering this is.
	 *
	 * @return string
	 */
	public function getTypeAttribute();
}