<?php

class CrearCuotasSinDefinirAction
{
    use AttributeAccessTrait;

    protected $attributes;

    public function __construct($attributes)
    {
        $this->attributes = $attributes;
    }

    /**
     * Lleva las cuotas de nómina que no existen en la prenómina a la sección de cuotas sin definir.
     *
     * @return int Número de cuotas afectadas
     */
    public function execute()
    {
        $cuotasSinDefinir = CuotasNominaQuery::noPresentesEnPrenomina([
            'prenomina' => $this->id_prenomina,
            'nomina' => $this->id_nomina,
        ]);

        foreach ($cuotasSinDefinir as $cuota) {
            $model = new DatosTxtTablaAmortizacionDiferido();
            $model->id_txt = $this->id_nomina;
            $model->cedula = $cuota['cedula'];
            $model->id_tipo_credito = $cuota['id_tipo_credito'];
            $model->monto_cuota = $cuota['monto_cuota'];
            $model->tipo_cuota = $cuota['tipo_cuota'];
            $model->observaciones = $this->getObservacion($cuota);
            $model->id_estatus_amortizacion_diferida = 1; // No definida
            $model->save();
        }

        return count($cuotasSinDefinir);
    }

    private function getObservacion($cuota)
    {
        if (! $cuota['cedula_en_prenomina']) {
            return 'La cédula no esta presente en la prenómina';
        }

        if (! $cuota['tipo_credito_en_prenomina']) {
            return 'La clave del préstamo no coincide con la clave en la prenómina';
        }

        return null;
    }
}
