<?php

class Comercializacao_Service_SalvarValorTonelada
{
    public function executar(
        int $idTaxaAgrupamento,
        bool $isTipoValorISProposta,
        array $itens = [],
        float $valorTonelada = 0
    ): void {
        if ($isTipoValorISProposta && empty($valorTonelada)) {
            throw new Exception('Valor de limite IS não informado.', 1);
        }

        $idProposta = (new Comercializacao_Model_TaxasAgrupamentoOrcamentos())
            ->getIdPropostaByIdTaxaAgrupamento($idTaxaAgrupamento);
        
        $model = new Comercializacao_Model_TaxaAgrupamentoItemSeguradoValorTonelada();
        $model->delete($idTaxaAgrupamento, 'id_taxa_agrupamento');

        $itens = $isTipoValorISProposta
            ? (new Seguro_Model_ItensSegurados())->getItensDisponiveisByProposta($idProposta, true)
            : $itens;
        
        foreach ($itens as $item) {
            $valorTonelada = (float) ($isTipoValorISProposta ? $valorTonelada : $item['valorTonelada']);
           
            if ($valorTonelada == 0) {
                continue;
            }

            $rs = $model->save([
                'id_taxa_agrupamento' => $idTaxaAgrupamento,
                'vl_tonelada' => $valorTonelada,
                'id_item_segurado' => $item['id']
            ]);

            if (!$rs) {
                throw new Exception('Erro ao salvar Limite de IS.', 1);
            }
        }
        
        // Atualiza flag para indicar se limite IS está configurado para item ou proposta
        (new Comercializacao_Model_TaxasAgrupamentos())->update([
            'fl_valor_tonelada_por_item' => $isTipoValorISProposta ? 0 : 1
        ], "id = {$idTaxaAgrupamento}");
    }
}
