<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

use App\Interfaces\IDs;
use App\Traits\{NextKey,PushNew};

/**
 * Class Payment
 * Payments that belong to an account
 *
 * Attributes for payments:
 * + lid                    : Local ID for payment
 * + payment_date           : Date payment received
 * + sid                    : System ID for payment
 * + total                  : Payment total
 *
 * @package App\Models
 */
class Payment extends Model implements IDs
{
	use NextKey,PushNew;

	const RECORD_ID = 'payment';
	public $incrementing = FALSE;

	const CREATED_AT = 'date_orig';
	const UPDATED_AT = 'date_last';

	protected $table = 'ab_payment';
	protected $dates = ['date_payment'];
	protected $dateFormat = 'U';
	protected $with = ['account.country.currency','items'];

	// Array of items that can be updated with PushNew
	protected $pushable = ['items'];

	/* RELATIONS */

	public function account()
	{
		return $this->belongsTo(Account::class);
	}

	public function items()
	{
		return $this->hasMany(PaymentItem::class);
	}

	/* ATTRIBUTES */

	/**
	 * @return mixed
	 * @deprecated use date_payment directly.
	 */
	public function getDatePaidAttribute()
	{
		return $this->date_payment->format('Y-m-d');
	}

	/**
	 * Payment Local ID
	 *
	 * @return string
	 */
	public function getLIDattribute(): string
	{
		return sprintf('%06s',$this->id);
	}

	/**
	 * Payment System ID
	 *
	 * @return string
	 */
	public function getSIDAttribute(): string
	{
		return sprintf('%02s-%04s#%s',$this->site_id,$this->account_id,$this->getLIDattribute());
	}

	public function getTotalAttribute()
	{
		return sprintf('%3.'.$this->currency()->rounding.'f',$this->total_amt);
	}

	public function currency()
	{
		return $this->account->country->currency;
	}
}