<?php

namespace App\Helpers\Database;

use App\Models\Static\SAT\CatalogItem;
use App\Models\Static\SAT\CatalogProdServ;
use App\Models\Static\SAT\CatalogUnit;

class SatCatalogsHelper
{
    /**
     * Obtiene un item de cualquier catálogo SAT genérico almacenado en la tabla `catalog_items`.
     *
     * @param string $catalog_code     Código del catálogo.
     * @param string $item_key         Clave SAT del item a buscar.
     * @param bool   $line_presentation Si es true, retorna "CLAVE - Etiqueta".
     *
     * @return string
     */
    public static function getItem(string $catalog_code, string $item_key, bool $line_presentation = false)
    : string
    {
        $item = CatalogItem::where('catalog_code', $catalog_code)
            ->where('item_key', $item_key)
            ->firstOrFail();

        if ($line_presentation) {
            return "{$item->item_key} - {$item->label}";
        }

        return $item->label;
    }

    /**
     * Obtiene la descripción de una unidad de medida del catálogo SAT c_ClaveUnidad.
     *
     * @param string $unit_key          Clave de unidad SAT.
     * @param bool   $line_presentation Si es true retorna "CLAVE - Descripción".
     *
     * @return string
     */
    public static function getUnit(string $unit_key, bool $line_presentation = false)
    : string
    {
        $item = CatalogUnit::where('unit_key', $unit_key)->firstOrFail();

        if ($line_presentation) {
            return "{$item->unit_key} - {$item->label}";
        }

        return $item->label;
    }

    /**
     * Obtiene la descripción de un producto/servicio (c_ClaveProdServ).
     *
     * @param string $prod_serv_key     Clave SAT del producto/servicio.
     * @param bool   $line_presentation Si es true retorna "CLAVE - Descripción".
     *
     * @return string
     */
    public static function getProdServ(string $prod_serv_key, bool $line_presentation = false)
    : string
    {
        $item = CatalogProdServ::where('prod_serv_key', $prod_serv_key)->firstOrFail();

        if ($line_presentation) {
            return "{$item->prod_serv_key} - {$item->description}";
        }

        return $item->description;
    }
}
