<?php
namespace Incoviba\old\Proyecto;

use Carbon\Carbon;
use Incoviba\Common\Alias\OldModel as Model;

/**
 * @property int $id
 * @property Pagare $pagare
 * @property double $insoluto
 * @property double $intereses
 * @property double $tasa
 * @property \DateTime $fecha
 * @property \DateTime $fecha_banco
 * @property int $duracion
 */
class RenovacionPagare extends Model
{
  public function pagare()
  {
    return $this->belongsTo(Pagare::class, 'pagare')->findOne();
  }
  public function fecha(\DateTime $fecha = null)
  {
    if ($fecha == null) {
      return Carbon::parse($this->fecha, config('app.timezone'));
    }
    $this->fecha = $fecha->format('Y-m-d');
  }
  public function fechaBanco(\DateTime $fecha = null)
  {
    if ($fecha == null) {
      return Carbon::parse($this->fecha_banco, config('app.timezone'));
    }
    $this->fecha_banco = $fecha->format('Y-m-d');
  }
  public function vencimiento()
  {
    return $this->fecha()->addDays($this->duracion);
  }
  public function uf()
  {
    if ($this->uf == 0) {
      $uf = uf($this->fecha());
      if ($uf->total > 0) {
        $this->uf = $uf->uf->value;
        $this->save();
      }
    }
    return $this->uf;
  }
  protected $valores;
  public function valor($tipo = 'ufs')
  {
    if ($this->valores == null) {
      $valores = [];
      switch (strtolower($this->pagare()->moneda()->descripcion)) {
        case 'uf':
          $valores = (object) ['uf' => $this->insoluto, 'pesos' => $this->insoluto * $this->uf()];
          break;
        case 'pesos':
          $valores = (object) ['uf' => $this->insoluto / $this->uf(), 'pesos' => $this->insoluto];
          break;
      }
      $this->valores = $valores;
    }
    switch (strtolower($tipo)) {
      case 'uf':
      case 'ufs':
        return $this->valores->uf;
      case 'peso':
      case 'pesos':
        return $this->valores->pesos;
    }
  }
  protected $intereses_arr;
  public function intereses($tipo = 'ufs') {
    if ($this->intereses_arr == null) {
      $this->intereses_arr = (object) ['uf' => $this->intereses / $this->uf(), 'pesos' => $this->intereses];
    }
    switch (strtolower($tipo)) {
      case 'uf':
      case 'ufs':
        return $this->intereses_arr->uf;
      case 'peso':
      case 'pesos':
        return $this->intereses_arr->pesos;
    }
  }
}
