33 lines
1011 B
PHP
33 lines
1011 B
PHP
<?php
|
|
|
|
namespace App\Services\Geral;
|
|
|
|
use App\Enums\Cadastro\UnidadeMedida;
|
|
use App\Models\Geral\InterpretacaoImc;
|
|
use App\Utils\ConversaoUnidadeMedidaUtil;
|
|
|
|
class ImcService
|
|
{
|
|
public static function calculate($unidadeMedidaMassaId, $massa, $unidadeMedidaAlturaId, $altura) : array
|
|
{
|
|
if ($unidadeMedidaMassaId == UnidadeMedida::GRAMAS) {
|
|
|
|
$massa = ConversaoUnidadeMedidaUtil::gramasParaQuilogramas($massa);
|
|
}
|
|
|
|
if ($unidadeMedidaAlturaId == UnidadeMedida::CENTIMETROS) {
|
|
|
|
$altura = ConversaoUnidadeMedidaUtil::centimetrosParaMetros($altura);
|
|
}
|
|
|
|
$imc = number_format($altura == 0 ? 0 : ($massa / ($altura * $altura)), 1, '.', '');
|
|
$interpretacao = InterpretacaoImc::where('min', '<=', $imc)->where('max', '>=', $imc)->first();
|
|
|
|
return [
|
|
'imc' => $imc,
|
|
'classificacao' => $interpretacao->classificacao ?? null,
|
|
'grau_obesidade' => $interpretacao->grau_obesidade ?? null,
|
|
];
|
|
}
|
|
}
|