<?php

class CargarNominaPrestamosAction
{
    use AttributeAccessTrait;

    protected $attributes;

    public function __construct($attributes)
    {
        $this->attributes = $attributes;
        Yii::import('prestamo.actions.queries.*');
        Yii::import('prestamo.actions.objects.*');
    }

    public function debugTime($callback)
    {
        $time_start = microtime(true);
        $callback();
        echo 'Execution time: ' . round(microtime(true) - $time_start, 4);
        die();
    }

    public function execute()
    {
        $totalNomina = CuotasNominaQuery::totalNoAfectadas([
            'nomina' => $this->id_nomina,
            'prenomina' => $this->id_prenomina,
        ]);
        $totalPrenomina = CuotasPrenominaQuery::totalNoAfectadas([
            'prenomina' => $this->id_prenomina,
        ]);

        if ($totalNomina < $totalPrenomina) {
            (new CasoAAction($this->attributes))->execute();
        } elseif ($totalNomina === $totalPrenomina) {
            (new CasoBAction($this->attributes))->execute();
        } elseif ($totalNomina > $totalPrenomina) {
            (new CasoCAction($this->attributes))->execute();
        }

        if (ConfPreNomina::config('id_metodo_distribucion') == MetodosDistribucion::COINCIDENTE) {
            CuotasNominaQuery::marcarAgrupadas(['nomina' => $this->id_nomina]);
        }

        return true;
    }
}
