from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
from django.http import HttpResponse
import io
import os
import datetime
import pandas as pd
from django.conf import settings
from centraltermica.views import determinar_aparelho, escolher_aparelho_renovacao
from ctermica.models import Ambiente, DadosTermicos
from paredes.models import Parede
from vidros.models import Vidro
from portas.models import Porta
from telhados.models import Telhado
import logging

logger = logging.getLogger(__name__)

def gerar_lista_materiais_split(potencia_btu, distancia_metros=25):
    """
    Gera uma lista de materiais específica para instalação de Split com base na potência (BTU/h) e distância.
    Define itens corretos para potências de 9.000 a 36.000 BTU/h.
    """
    if potencia_btu <= 12000:  # Até 12.000 BTU/h
        cabo_secao = "2,5 mm²"
        disjuntor = "10A"
        tubo_liquido = "6,35 mm (1/4\")"
        tubo_gas = "9,52 mm (3/8\")"
    elif potencia_btu <= 18000:  # Até 18.000 BTU/h
        cabo_secao = "4 mm²"
        disjuntor = "15A"
        tubo_liquido = "6,35 mm (1/4\")"
        tubo_gas = "12,7 mm (1/2\")"
    elif potencia_btu <= 24000:  # Até 24.000 BTU/h
        cabo_secao = "4 mm²"
        disjuntor = "20A"
        tubo_liquido = "9,52 mm (3/8\")"
        tubo_gas = "15,88 mm (5/8\")"
    else:  # Até 36.000 BTU/h
        cabo_secao = "6 mm²"
        disjuntor = "25A"
        tubo_liquido = "9,52 mm (3/8\")"
        tubo_gas = "15,88 mm (5/8\")"

    return [
        # Tubulação Frigorígena
        (f"Tubo de cobre linha de líquido ({tubo_liquido}, Classe A, sem costura, NBR 13206)", f"{distancia_metros} m"),
        (f"Tubo de cobre linha de gás ({tubo_gas}, Classe A, sem costura, NBR 13206)", f"{distancia_metros} m"),
        ("Isolamento térmico para tubo de líquido (9 mm)", f"{distancia_metros} m"),
        ("Isolamento térmico para tubo de gás (9 mm)", f"{distancia_metros} m"),
        ("Fitas de amarração tipo nylon", "1 rolo de 10 m"),

        # Elétrica
        (f"Cabo elétrico fase ({cabo_secao})", "30 m"),
        (f"Cabo elétrico neutro ({cabo_secao})", "30 m"),
        (f"Cabo de aterramento ({cabo_secao}, verde)", "30 m"),
        (f"Cabo de interligação evaporadora-condensadora (1,5 mm²)", f"{distancia_metros} m"),
        (f"Disjuntor termomagnético curva C ({disjuntor})", "1 un"),
        ("Disjuntor DR (30 mA)", "1 un"),
        ("Eletroduto corrugado (3/4\")", "30 m"),
        ("Caixa de passagem PVC (4x2\")", "2 un"),
        ("Fita isolante antichama", "1 un"),
        ("Conectores tipo borne (para seção do cabo)", "4 un"),
        ("Terminais olhal (para seção do cabo)", "4 un"),

        # Drenagem
        ("Mangueira de drenagem (5/8\")", f"{distancia_metros} m"),
        ("Curva 90° PVC (5/8\")", "2 un"),
        ("Abraçadeira plástica para mangueira", "5 un"),
        ("Silicone vedante", "1 tubo"),

        # Fixação e Suporte
        ("Suporte de condensadora galvanizado", "1 par"),
        ("Parafusos com buchas (12 mm)", "8 un"),
        ("Bandeja de proteção para condensadora", "1 un"),
        ("Manta antivibração (borracha 10 mm)", "2 un"),

        # Gás e Testes
        ("Carga de Gás R-410A", f"{potencia_btu * 0.00006:.2f} kg"),  # 60 g por 1.000 BTU
        ("Manifold para R-410A com mangueiras", "1 un"),
        ("Bomba de vácuo (1/4 HP)", "1 un"),
        ("Cilindro de nitrogênio (1 m³)", "1 un"),
        ("Válvula Schrader (compatível com tubulação)", "2 un")
    ]

def consolidar_materiais(aparelhos_totais, distancia_metros=25):
    """
    Consolida os materiais necessários para todos os aparelhos, somando quantidades quando aplicável.
    """
    materiais_totais = {}
    for aparelho in aparelhos_totais:
        potencia = aparelho.get('capacidade_resfriamento_btu', 0)
        materiais = gerar_lista_materiais_split(potencia, distancia_metros)
        for item, qtd in materiais:
            if item in materiais_totais:
                if "m" in qtd or "un" in qtd or "par" in qtd or "rolo" in qtd or "tubo" in qtd:
                    try:
                        valor_atual = float(materiais_totais[item].split()[0])
                        valor_novo = float(qtd.split()[0])
                        unidade = qtd.split()[1]
                        materiais_totais[item] = f"{valor_atual + valor_novo} {unidade}"
                    except (ValueError, IndexError):
                        materiais_totais[item] = qtd
                elif "kg" in qtd:
                    valor_atual = float(materiais_totais[item].split()[0])
                    valor_novo = float(qtd.split()[0])
                    materiais_totais[item] = f"{valor_atual + valor_novo:.2f} kg"
                else:
                    materiais_totais[item] = qtd
            else:
                materiais_totais[item] = qtd

    return [(idx + 1, desc, qtd) for idx, (desc, qtd) in enumerate(materiais_totais.items())]

def gerar_termo_instalacao(request, projeto):
    doc = Document()

    # Configurar estilo padrão
    style = doc.styles['Normal']
    style.font.name = 'Arial'
    style.font.size = Pt(12)

    # Função auxiliar para adicionar cabeçalho em todas as páginas
    def add_header(section, projeto):
        header = section.header
        header_para = header.paragraphs[0] if header.paragraphs else header.add_paragraph()
        header_para.alignment = WD_ALIGN_PARAGRAPH.LEFT
        run = header_para.add_run("SUGESTÃO DE TERMO DE REFERÊNCIA PARA INSTALAÇÃO DE EQUIPAMENTOS DE CLIMATIZAÇÃO\n")
        run.font.name = 'Arial'
        run.font.size = Pt(10)
        run.bold = True
        run = header_para.add_run(f"Órgão Requisitante: Prefeitura Municipal de {projeto.cidade.split(',')[0]}\n")
        run.font.name = 'Arial'
        run.font.size = Pt(9)
        run = header_para.add_run(f"Projeto: {projeto.nome_projeto}")
        run.font.name = 'Arial'
        run.font.size = Pt(9)

    # Funções auxiliares ajustadas
    def add_heading(text, level):
        heading = doc.add_heading(text, level=level)
        heading.alignment = WD_ALIGN_PARAGRAPH.LEFT
        run = heading.runs[0]
        run.font.name = 'Arial'
        run.font.size = Pt(14 if level == 1 else 12)
        run.bold = True

    def add_paragraph(text, alignment=WD_ALIGN_PARAGRAPH.JUSTIFY):
        p = doc.add_paragraph(text)
        p.alignment = alignment
        for run in p.runs:
            run.font.name = 'Arial'
            run.font.size = Pt(12)
        return p

    def add_table_style(table):
        for row in table.rows:
            for cell in row.cells:
                if cell.paragraphs:
                    para = cell.paragraphs[0]
                    para.alignment = WD_ALIGN_PARAGRAPH.CENTER
                    if para.runs:
                        run = para.runs[0]
                        run.font.name = 'Arial'
                        run.font.size = Pt(11)

    # Configurar cabeçalho na primeira seção
    add_header(doc.sections[0], projeto)

    from docx.enum.table import WD_ALIGN_VERTICAL

    # Obter a seção para pegar altura da página
    section = doc.sections[0]
    section.start_type

    # Criar tabela com uma célula para centralizar verticalmente
    table = doc.add_table(rows=1, cols=1)
    table.allow_autofit = False
    cell = table.cell(0, 0)
    cell.vertical_alignment = WD_ALIGN_VERTICAL.CENTER

    # Remover bordas da tabela
    tbl = table._tbl
    for border in tbl.xpath(".//w:tblBorders"):
        border.getparent().remove(border)

    # Centralizar horizontalmente
    p = cell.paragraphs[0]
    p.alignment = WD_ALIGN_PARAGRAPH.CENTER

    run = p.add_run("SUGESTÃO DE TERMO DE REFERÊNCIA\nPARA INSTALAÇÃO DE EQUIPAMENTOS DE CLIMATIZAÇÃO")
    run.font.name = 'Arial'
    run.font.size = Pt(18)
    run.bold = True



    doc.add_paragraph()  # Espaço em branco
    add_paragraph(f"Órgão Requisitante: Prefeitura Municipal de {projeto.cidade.split(',')[0]}", WD_ALIGN_PARAGRAPH.CENTER)
    add_paragraph(f"Projeto: {projeto.nome_projeto}", WD_ALIGN_PARAGRAPH.CENTER)
    add_paragraph(f"Data: 30 de março de 2025", WD_ALIGN_PARAGRAPH.CENTER)



    # Quebra de página após a capa
    doc.add_page_break()

    # Conteúdo principal (exemplo, o resto segue igual)
    # 1. Objeto
    add_heading("1. Objeto", level=2)
    ambientes = Ambiente.objects.filter(projeto=projeto)
    total_aparelhos = sum(len(determinar_aparelho(0, amb.tipo_aparelho or "hiwall")) for amb in ambientes)
    total_renovadores = sum(1 for amb in ambientes if DadosTermicos.objects.filter(ambiente=amb).exists() and escolher_aparelho_renovacao(0, 0, 0, 0).get("melhor_comb", []))
    add_paragraph(
        f"O presente Termo de Referência tem por objeto a contratação de empresa especializada para a execução dos serviços de instalação "
        f"de {total_aparelhos} equipamentos de climatização do tipo Split e {total_renovadores} renovadores de ar, conforme especificações "
        f"técnicas constantes neste documento. Os serviços incluem a instalação completa, testes de funcionamento, comissionamento e entrega "
        f"final em condições de pleno funcionamento, em conformidade com as normas NBR 16401 (Climatização), NBR 5410 (Instalações Elétricas) "
        f"e demais regulamentos aplicáveis."
    )

    # 2. Fundamentação Legal
    add_heading("2. Fundamentação Legal", level=2)
    add_paragraph(
        "O presente Termo de Referência encontra-se fundamentado na Lei Federal nº 14.133, de 1º de abril de 2021, que estabelece as normas gerais "
        "de licitação e contratação pública, aplicável às administrações diretas, autárquicas e fundacionais da União, dos Estados, do Distrito Federal e dos Municípios. "
        "Conforme seu artigo 6º, inciso IX, este documento se qualifica como parte do projeto básico, caracterizando tecnicamente o objeto da contratação, "
        "com nível de precisão suficiente para assegurar sua viabilidade, permitir a avaliação de custos e definir os parâmetros mínimos para o fornecimento e instalação dos equipamentos."
    )
    add_paragraph(
        "A contratação também se fundamenta no artigo 11 da mesma Lei nº 14.133/2021, que trata dos princípios aplicáveis à contratação pública, "
        "notadamente os princípios da legalidade, impessoalidade, moralidade, publicidade, eficiência, eficácia, economicidade, julgamento objetivo, "
        "planejamento, transparência e sustentabilidade, todos observados na elaboração deste documento e no desenvolvimento do projeto técnico."
    )
    add_paragraph(
        "Do ponto de vista técnico-sanitário, as instalações de climatização e renovação de ar devem observar os critérios estabelecidos pela norma ABNT NBR 17037:2024, "
        "que substituiu a Resolução RE nº 9, de 16 de janeiro de 2003, da ANVISA. Essa norma define os padrões referenciais de qualidade do ar em ambientes climatizados de uso público e coletivo, "
        "incluindo limites para dióxido de carbono (CO₂), material particulado (PM10 e PM2,5) e requisitos para ventilação, filtragem e renovação de ar. "
        "A adoção dessas diretrizes visa garantir a proteção da saúde dos ocupantes, conforme preconizado pelo Programa Nacional de Qualidade do Ar Interno (PNQAI), "
        "com foco na melhoria contínua da qualidade do ar em ambientes internos."
    )

    add_paragraph(
        "Além disso, o projeto técnico segue as diretrizes normativas da Associação Brasileira de Normas Técnicas (ABNT), em especial as normas da série NBR 16401, "
        "Partes 1, 2 e 3, que tratam respectivamente de critérios de projeto, parâmetros de desempenho e procedimentos de manutenção para sistemas de ar-condicionado "
        "de conforto, aplicáveis em edificações de uso público e institucional."
    )
    add_paragraph(
        "O presente documento observa ainda recomendações do Tribunal de Contas da União (TCU) no tocante à clareza, objetividade e justificativa técnica da contratação, "
        "assegurando que a aquisição de bens e serviços seja pautada por critérios técnicos consistentes, alinhados ao interesse público e à boa governança administrativa."
    )


    # 3. Justificativa da Contratação
    add_heading("3. Justificativa da Contratação", level=2)
    add_paragraph(
        f"A contratação dos serviços de instalação dos equipamentos de climatização previamente adquiridos para os prédios públicos do município de {projeto.cidade.split(',')[0]} "
        f"é medida indispensável à efetiva implementação do sistema de conforto ambiental e à promoção da saúde e bem-estar dos usuários desses espaços. "
        f"A instalação correta assegura o funcionamento dentro dos padrões técnicos exigidos pelos fabricantes e pelas normas regulatórias vigentes, "
        f"preservando a validade das garantias de fábrica, evitando desperdícios de energia, prevenindo falhas prematuras e otimizando o desempenho dos equipamentos."
    )
    add_paragraph(
        "Do ponto de vista normativo e sanitário, a correta instalação impacta diretamente na qualidade do ar interior, conforme estabelecido na ABNT NBR 17037:2024, "
        "bem como nas diretrizes do Programa Nacional de Qualidade do Ar Interno (PNQAI), contribuindo para a redução de riscos associados à concentração de dióxido de carbono (CO₂), "
        "ao acúmulo de contaminantes microbiológicos e ao surgimento de problemas respiratórios em ambientes coletivos."
    )
    add_paragraph(
        "Além dos aspectos técnicos, a contratação é plenamente justificada sob a ótica da gestão pública eficiente e responsável, uma vez que "
        "a ausência de instalação compromete o uso do patrimônio já adquirido, podendo gerar desperdício de recursos públicos, depreciação de bens e descumprimento de metas administrativas. "
        "A medida está alinhada aos princípios constitucionais da eficiência, economicidade e continuidade dos serviços públicos."
    )


    # 4. Escopo dos Serviços
    add_heading("4. Escopo dos Serviços", level=2)
    add_paragraph(
        "O escopo contempla a execução dos serviços técnicos especializados de instalação de sistemas de climatização tipo Split System e equipamentos de renovação de ar, abrangendo todas as etapas necessárias para o perfeito funcionamento, segurança e conformidade normativa das unidades instaladas. As atividades incluem, mas não se limitam a:"
    )
    add_paragraph("• Visita técnica prévia para levantamento completo das condições do local de instalação, incluindo análise estrutural e análise elétrica, conforme descrito a seguir:")

    add_paragraph(
        "Análise estrutural: avaliação das condições físicas do ambiente, considerando a capacidade da parede ou laje para suportar o peso das unidades (evaporadora e condensadora); escolha de local seguro para fixação dos suportes (evitando paredes ocas ou materiais frágeis, como drywall); verificação dos afastamentos mínimos para ventilação e manutenção; e análise da ventilação natural ou forçada ao redor da unidade condensadora. Esta etapa é fundamental para evitar riscos de queda, vibração excessiva e falhas estruturais."
    )

    add_paragraph(
        "Análise elétrica: verificação da disponibilidade de circuito elétrico exclusivo para o ar-condicionado; existência de disjuntor compatível com a potência do equipamento; conferência da bitola dos cabos conforme a NBR 5410; presença de aterramento funcional e proteção contra surtos; e distância adequada entre o ponto de alimentação elétrica e o local de instalação. Esta verificação visa prevenir sobrecarga elétrica, falhas de funcionamento e perda de garantia do fabricante."
    )    
    add_paragraph("• Transporte, acondicionamento, içamento (quando necessário) e posicionamento correto das unidades evaporadoras e condensadoras:")
    add_paragraph(
        "  Os equipamentos devem ser transportados com o devido cuidado, utilizando materiais de proteção contra impacto, umidade e poeira. "
        "No caso de instalação em locais elevados (telhados, coberturas ou lajes técnicas), deve-se prever o içamento com cordas, guindastes ou talhas, conforme as normas de segurança do trabalho. "
        "O posicionamento final deve seguir o layout técnico, garantindo acesso facilitado para manutenção, proteção contra intempéries e boa circulação de ar ao redor da unidade externa."
    )

    add_paragraph("• Instalação física das unidades conforme layout técnico e recomendações dos fabricantes, observando requisitos de ventilação, afastamentos e acessibilidade para manutenção:")
    add_paragraph(
        "  A instalação deve seguir rigorosamente as instruções do fabricante e o projeto técnico, com fixação segura das unidades em suportes apropriados (metálicos galvanizados ou com tratamento anticorrosivo). "
        "Devem ser respeitados os afastamentos mínimos entre a unidade e paredes ou obstáculos para garantir a ventilação adequada. A unidade interna deve ser instalada em altura compatível para boa distribuição do ar e manutenção segura."
    )

    add_paragraph("• Execução das interligações frigorígenas com tubos de cobre tipo rosca ou flange, com isolação térmica adequada, conforme NBR 13206 e manuais técnicos:")
    add_paragraph(
        "  As linhas frigorígenas (tubulações de cobre) devem ser dimensionadas de acordo com a distância entre as unidades e as orientações do fabricante. "
        "A conexão pode ser feita por flangeamento ou soldagem, sempre com vedação segura e sem vazamentos. Os tubos devem ser isolados com espuma elastomérica (ex: Armaflex) para evitar perdas térmicas e condensação superficial."
    )

    add_paragraph("• Conexão elétrica entre unidades com cabos dimensionados conforme a NBR 5410, com proteção por disjuntor termomagnético e aterramento apropriado conforme NBR 5419:")
    add_paragraph(
        "  A alimentação elétrica deve ser feita com circuito exclusivo, fiação adequada à corrente nominal do equipamento, e instalação de disjuntor termomagnético de proteção. "
        "Todas as conexões devem ser realizadas em caixas de passagem ou eletrodutos com acesso fácil. É obrigatório o aterramento funcional das unidades conforme a NBR 5419, para segurança dos usuários e proteção contra surtos."
    )

    add_paragraph("• Instalação do sistema de drenagem para retirada de condensado, com tubos, conexões e declividades adequadas, assegurando estanqueidade e ausência de refluxo:")
    add_paragraph(
        "  A unidade evaporadora deve ser equipada com sistema de drenagem conectado a tubulação em PVC, mangueiras flexíveis ou conexões específicas. "
        "É essencial garantir declividade suficiente para o escoamento por gravidade e evitar refluxo. O ponto final deve estar conectado à rede de esgoto ou área externa com vedação adequada para evitar entrada de insetos e odores."
    )

    add_paragraph("• Instalação dos sistemas de renovação de ar mecânica com dutos flexíveis de diâmetro mínimo de 150 mm, captação de ar externo, passagem segura e difusores internos em pontos estratégicos:")
    add_paragraph(
        "  O sistema de renovação deve utilizar ventiladores (exaustores ou insufladores) com dutos flexíveis de PVC aluminizado ou similar, com bitolas mínimas de 150 mm. "
        "A captação deve ser feita em área externa livre de poluentes ou fontes de calor, com grade protetora. Os dutos devem percorrer rotas seguras e sem obstruções até os ambientes internos, onde serão instalados os difusores em pontos definidos no projeto técnico."
    )

    add_paragraph("• Fixação e vedação dos dutos, quando aplicável, com registro de vazão, de acordo com cálculo térmico do projeto básico e recomendações da ABNT NBR 16401-3:")
    add_paragraph(
        "  Os dutos devem ser fixados com cintas, abraçadeiras ou suportes metálicos a cada metro. As conexões entre trechos devem ser vedadas com fita alumínio ou selante específico para evitar fugas de ar. "
        "Sempre que necessário, deve-se instalar registro de vazão para balanceamento do sistema, com ajustes baseados no cálculo de carga térmica conforme a ABNT NBR 16401-3."
    )

    add_paragraph("• Aplicação de vácuo nas linhas frigorígenas, liberação do fluido refrigerante, startup do equipamento, equalização do sistema e execução de testes operacionais:")
    add_paragraph(
        "  Após o fechamento do circuito frigorígeno, deve-se aplicar vácuo com bomba adequada até atingir 500 microns, para remover umidade e gases residuais. "
        "Em seguida, o fluido refrigerante é liberado e o equipamento é ligado. Os técnicos devem equalizar a operação (pressão, carga de gás, consumo elétrico) com instrumentos calibrados."
    )

    add_paragraph("• Verificação de pressão, corrente elétrica, vazamento, ruído, e temperatura de insuflamento, com ajustes de funcionamento e balanço térmico conforme necessidade:")
    add_paragraph(
        "  São realizados testes de funcionamento contínuo por pelo menos 30 minutos, medindo a pressão de sucção e descarga, corrente elétrica, temperatura de entrada e saída de ar, ruído da unidade interna e externa, e identificação de eventuais vazamentos. "
        "Caso necessário, ajustes devem ser realizados para otimizar o desempenho do equipamento."
    )

    add_paragraph("• Elaboração de relatório técnico final contendo checklist de conformidade com normas técnicas, registros fotográficos da instalação e assinatura de responsável técnico com ART (Anotação de Responsabilidade Técnica):")
    add_paragraph(
        "  O instalador deve emitir um relatório final contendo checklist de conformidade com as normas técnicas aplicáveis (ABNT, INMETRO, NBR 16401, NBR 5410, etc), registros fotográficos de cada etapa da instalação, e indicar o responsável técnico com respectiva ART emitida pelo CREA. "
        "Este documento é essencial para validação da garantia, fiscalização e arquivamento na Administração Pública."
    )


    # 5. Responsabilidade Técnica
    add_heading("5. Responsabilidade Técnica", level=2)
    add_paragraph(
        "A execução dos serviços descritos neste Termo de Referência deverá ser acompanhada por profissional legalmente habilitado, com registro ativo no "
        "Conselho Regional de Engenharia e Agronomia (CREA) ou no Conselho Federal dos Técnicos Industriais (CFT), conforme a natureza e atribuições do serviço contratado."
    )
    add_paragraph(
        "É obrigatória a apresentação da Anotação de Responsabilidade Técnica (ART), nos termos da Lei nº 6.496/1977, ou do Termo de Responsabilidade Técnica (TRT), "
        "em conformidade com a Resolução nº 66/2019 do CFT, antes do início da execução dos serviços. Este documento deverá estar vinculado ao objeto contratual e conter "
        "a descrição clara das atividades técnicas a serem desenvolvidas."
    )
    add_paragraph(
        "O responsável técnico deverá realizar acompanhamento periódico e presencial, especialmente durante as etapas críticas da instalação, respondendo pelas conformidades técnicas, "
        "pela segurança da execução e pela observância das normas regulamentadoras aplicáveis. A ausência de ART/TRT ou de supervisão qualificada configura descumprimento contratual grave "
        "e poderá ensejar aplicação das sanções previstas na Lei nº 14.133/2021."
    )
    add_paragraph(
        "A exigência de responsabilidade técnica visa assegurar a rastreabilidade das atividades técnicas executadas, a proteção da Administração Pública e a qualidade dos serviços prestados, "
        "em consonância com os princípios da legalidade, eficiência, segurança e transparência."
    )


    # 6. Observações Importantes
    add_heading("6. Observações Importantes", level=2)

    add_paragraph(
        "A estimativa de materiais e insumos apresentada neste Termo de Referência foi elaborada considerando uma distância média de até 25 metros lineares entre as unidades evaporadoras "
        "e condensadoras para cada sistema de climatização. Essa estimativa inclui os trechos de tubulação frigorígena, linha elétrica, dutos de drenagem e condutos de renovação de ar."
    )

    add_paragraph(
        "Contudo, recomenda-se fortemente a realização de visita técnica prévia obrigatória por parte do responsável técnico da empresa contratada, para aferição das condições reais "
        "do local de instalação, incluindo rotas de passagem, obstáculos físicos, necessidade de suportes adicionais, reforços estruturais (em caso de paredes frágeis, como drywall), "
        "altura de instalação, viabilidade de acesso, existência de infraestrutura elétrica e civil compatível, e outras interferências técnicas que possam impactar o escopo, prazo ou custo dos serviços."
    )

    add_paragraph(
        "A visita técnica deverá ser documentada com registro fotográfico e relatório assinado pelo responsável técnico, contendo eventuais ajustes necessários na lista de materiais sugerida, "
        "a fim de garantir a perfeita execução do objeto contratual sem prejuízo à funcionalidade ou à conformidade normativa. O não cumprimento dessa etapa poderá implicar em responsabilidade "
        "exclusiva do contratado por falhas ou omissões decorrentes de avaliação inadequada das condições locais."
    )


    from docx.enum.text import WD_COLOR_INDEX

    # Título da seção
    doc.add_heading("7. Estimativa de Preços", level=2)

    # Parágrafo 1
    p1 = doc.add_paragraph()
    run1 = p1.add_run(
        "A estimativa de preços deverá ser elaborada pela própria Administração Pública contratante, e anexada a este Termo de Referência antes da publicação do edital, conforme determina o art. 23 da Lei nº 14.133/2021, "
        "com base em fontes oficiais e critérios objetivos que assegurem a viabilidade econômica da contratação."
    )
    run1.font.highlight_color = WD_COLOR_INDEX.YELLOW

    # Parágrafo 2
    p2 = doc.add_paragraph()
    run2 = p2.add_run("Recomenda-se que a pesquisa de preços considere, sempre que possível:")
    run2.font.highlight_color = WD_COLOR_INDEX.YELLOW

    # Lista de recomendações
    lista_itens = [
        "- Orçamentos obtidos junto a, no mínimo, três fornecedores distintos;",
        "- Consultas a sistemas públicos, como o Painel de Preços do Governo Federal e o Banco de Preços em Saúde;",
        "- Valores praticados em contratações similares anteriores, preferencialmente por entes públicos equivalentes;",
        "- Referências disponíveis em sites oficiais de fabricantes ou distribuidores autorizados."
    ]

    for item in lista_itens:
        p = doc.add_paragraph()
        run = p.add_run(item)
        run.font.highlight_color = WD_COLOR_INDEX.YELLOW

    # Parágrafo final
    p3 = doc.add_paragraph()
    run3 = p3.add_run(
        "A média dos preços obtidos na pesquisa deverá ser utilizada como parâmetro de aceitabilidade das propostas, conforme os princípios "
        "da economicidade, vantajosidade e razoabilidade. Recomenda-se que a Administração anexe a este Termo de Referência a respectiva planilha de composição dos preços estimados, "
        "com os registros da pesquisa realizada."
    )
    run3.font.highlight_color = WD_COLOR_INDEX.YELLOW




    add_heading("8. Critérios de Julgamento e Aceitabilidade das Propostas", level=2)
    add_paragraph(
        "O critério de julgamento adotado será o de menor preço global, desde que atendidas todas as especificações técnicas e condições previstas "
        "neste Termo de Referência."
    )
    add_paragraph("Serão desclassificadas as propostas que:")
    add_paragraph("- Deixarem de atender integralmente aos requisitos técnicos exigidos;")
    add_paragraph("- Apresentarem preços manifestamente inexequíveis;")
    add_paragraph("- Propuserem marcas/modelos com desempenho ou qualidade inferior ao especificado.")
    add_paragraph(
        "A aceitação das propostas será condicionada à comprovação de compatibilidade com as especificações, mediante catálogos, laudos técnicos "
        "ou certificados de conformidade."
    )

    doc.add_paragraph(
        "Gestão e Fiscalização do Contrato:\n"
        "Nos termos do art. 73 da Lei nº 14.133/2021, a Administração designará formalmente um gestor do contrato e, quando necessário, fiscais auxiliares, "
        "com competência para acompanhar, fiscalizar e validar a execução do objeto contratado. Caberá ao gestor do contrato assegurar o fiel cumprimento das cláusulas contratuais, "
        "bem como registrar ocorrências, aplicar penalidades previstas e emitir atestados de conformidade quando aplicável.\n\n"
        "A equipe de fiscalização deverá observar os critérios técnicos estabelecidos neste Termo de Referência, avaliando prazos, qualidade dos equipamentos, instalação adequada, "
        "eficiência energética, níveis de ruído, e demais exigências previstas. A atuação da fiscalização será registrada em relatório circunstanciado e, se necessário, "
        "comunicada à autoridade competente para adoção das medidas cabíveis.\n\n"
        "Esta estrutura de acompanhamento visa atender às diretrizes do Acórdão nº 1.693/2023 do Tribunal de Contas da União (TCU), garantindo a conformidade, "
        "a economicidade e a eficácia na execução contratual."
    )


    add_heading("9. Requisitos de Habilitação Técnica", level=2)
    add_paragraph(
        "Para fins de habilitação, a empresa proponente deverá apresentar:"
    )
    add_paragraph("- Atestado(s) de capacidade técnica emitido(s) por pessoa jurídica de direito público ou privado, que comprove(m) experiência compatível com o objeto da contratação;")
    add_paragraph("- Comprovante de regularidade junto ao Conselho Regional competente (ex: CREA/CAU), quando aplicável;")
    add_paragraph("- Certificados de conformidade dos equipamentos, emitidos por entidades acreditadas pelo INMETRO, quando exigidos pelas normas técnicas.")
    add_paragraph(
        "A ausência da documentação poderá implicar a inabilitação da proposta, conforme as regras previstas no edital e na legislação vigente."
    )

    from docx.enum.text import WD_COLOR_INDEX

    # Título da seção
    doc.add_heading("10. Local de Entrega e Instalação", level=2)

    # Parágrafo principal com endereço editável
    p1 = doc.add_paragraph()
    run1 = p1.add_run(
        "Os equipamentos deverão ser instalados nas unidades da Prefeitura Municipal de {projeto.cidade}."
        "Ou conforme especificado pela prefeitura contratante no edital")
    run1.font.highlight_color = WD_COLOR_INDEX.YELLOW

    # Parágrafo introdutório
    p2 = doc.add_paragraph()
    run2 = p2.add_run("A Contratada deverá assegurar:")
    run2.font.highlight_color = WD_COLOR_INDEX.YELLOW

    # Lista com itens destacados
    itens = [
        "- Transporte, descarga, alocação e instalação dos equipamentos no local indicado;",
        "- Execução sem prejuízo às atividades funcionais dos locais;",
        "- Cumprimento das normas de segurança e das exigências técnicas constantes deste Termo de Referência."
    ]

    for item in itens:
        p = doc.add_paragraph()
        run = p.add_run(item)
        run.font.highlight_color = WD_COLOR_INDEX.YELLOW

    # 8. Forma de Execução
    add_heading("11. Forma de Execução", level=2)

    add_paragraph(
        "Os serviços deverão ser executados de forma presencial, contínua e organizada por equipe técnica devidamente qualificada e supervisionada por responsável técnico habilitado. "
        "A execução será dividida em etapas sequenciais e interdependentes, conforme descrito a seguir:"
    )

    add_paragraph(" Etapa 1 – Instalação física das unidades: posicionamento e fixação das unidades evaporadoras (internas) e condensadoras (externas), respeitando os critérios de ventilação, afastamentos mínimos, acesso para manutenção e segurança estrutural;")

    add_paragraph("Etapa 2 – Interligações frigorígenas e elétricas: conexão entre unidades por meio de tubulação de cobre com isolamento térmico adequado (conforme ABNT NBR 13206), além da instalação de cabos elétricos compatíveis com a carga dos equipamentos, disjuntores e sistema de aterramento conforme ABNT NBR 5410 e NBR 5419;")

    add_paragraph(" Etapa 3 – Drenagem e renovação de ar: montagem das linhas de drenagem do condensado com declividade mínima e estanqueidade, além da instalação dos dutos de renovação de ar (mínimo 150 mm), com captação externa e difusores internos bem posicionados;")

    add_paragraph("Etapa 4 – Comissionamento e testes operacionais: aplicação de vácuo, liberação do fluido refrigerante, ajustes de funcionamento, verificação de pressão, corrente, vazamentos, temperatura de insuflamento, ruído e balanço térmico final;")

    add_paragraph(
        "Todos os serviços devem seguir rigorosamente as normas técnicas brasileiras vigentes, em especial a ABNT NBR 16401 (Partes 1, 2 e 3), NBR 5410, NBR 13206, além das especificações do fabricante dos equipamentos, manuais técnicos e diretrizes de segurança e boas práticas da engenharia."
    )


    # 9. Prazo de Execução
    add_heading("12. Prazo de Execução", level=2)

    import math

    def calcular_prazo_com_base(aparelhos, renovadores=0):
        total = aparelhos + renovadores
        adicional = math.ceil(total / 2)
        return 30 + adicional


    prazo_estimado = calcular_prazo_com_base(total_aparelhos, total_renovadores)
    add_paragraph(
        f"O prazo estimado para a execução total dos serviços será de até {prazo_estimado} dias úteis, "
        f"contados a partir da emissão formal da Ordem de Início dos Serviços. Esse prazo considera um período base de 30 dias úteis, "
        f"destinado à mobilização da equipe técnica, planejamento, comissionamento, correções e entrega técnica com ART, "
        f"acrescido de tempo proporcional à quantidade de equipamentos a instalar, adotando-se como referência a produtividade média de "
        f"2,0 unidades instaladas por dia útil por equipe técnica."
    )


    add_paragraph(
        "O prazo poderá ser prorrogado mediante solicitação formal e apresentação de justificativa técnica fundamentada, desde que demonstrado o interesse público, "
        "a viabilidade técnica e a inexistência de prejuízo à Administração, conforme previsto no art. 141 da Lei nº 14.133/2021. A prorrogação estará sujeita à análise "
        "e aprovação do fiscal do contrato ou da autoridade competente, e deverá ser formalizada por aditivo contratual."
    )


    add_paragraph(
        "O não cumprimento do prazo estabelecido para execução dos serviços, sem apresentação de justificativa técnica aceita pela Administração, "
        "poderá ensejar a aplicação de sanções contratuais, nos termos do contrato, do edital e da Lei nº 14.133/2021. Entre as penalidades cabíveis, "
        "incluem-se advertência, multa, suspensão temporária de participação em licitação e impedimento de contratar com a Administração Pública, "
        "conforme previsto nos arts. 155 a 159 da referida lei."
    )


    add_heading("13. Das infrações e sansões aplicáveis", level=2)


    doc.add_paragraph(
        "13.1. Penalidades\n"
        "A Contratada estará sujeita às seguintes sanções administrativas em caso de descumprimento total ou parcial das obrigações previstas neste Termo de Referência ou no contrato dele decorrente, conforme disposto no artigo 155 da Lei nº 14.133, de 1º de abril de 2021, e em observância às diretrizes do Tribunal de Contas da União:\n\n"
        "a) Advertência por Escrito: Aplicável em casos de infrações leves, como atrasos pontuais de até 2 (dois) dias na entrega ou instalação dos equipamentos, ou falhas na apresentação de documentos exigidos, desde que não comprometam significativamente a execução do contrato. A advertência será formalizada por notificação escrita, com registro no processo administrativo, visando à correção imediata da falha.\n\n"
        "b) Multa:\n"
        "- Multa Moratória: Incidente por atraso injustificado na entrega ou instalação dos equipamentos, no valor de 0,5% (meio por cento) do valor total do contrato por dia de atraso, limitada a 10% (dez por cento) do valor contratual. O prazo máximo para cumprimento será de 5 (cinco) dias corridos, conforme estipulado neste Termo de Referência, salvo justificativa aceita pela Administração Pública.\n"
        "- Multa Compensatória: Aplicada por descumprimento de especificações técnicas ou entrega de equipamentos em desconformidade com o exigido, no valor de 5% (cinco por cento) do valor do item rejeitado, cumulável com a multa moratória, se aplicável.\n"
        "Os valores das multas serão descontados dos pagamentos devidos à Contratada ou cobrados diretamente, caso não haja saldo a compensar.\n\n"
        "c) Impedimento de Licitar e Contratar com a Administração Pública: Aplicável por reincidência em infrações graves, como entrega de equipamentos com defeitos insanáveis ou descumprimento reiterado das obrigações contratuais, pelo prazo de até 2 (dois) anos, conforme gravidade da falta, avaliada em processo administrativo com garantia de contraditório e ampla defesa.\n\n"
        "d) Declaração de Inidoneidade para Licitar ou Contratar com a Administração Pública: Cabível em casos de infrações gravíssimas, como fraude, dolo na execução do contrato ou inexecução total injustificada, pelo prazo de até 6 (seis) anos, conforme artigo 156 da Lei nº 14.133/2021, decidida em processo administrativo com ampla defesa e sujeita à revisão judicial.\n\n"
        "e) Rescisão Contratual: Aplicável em situações de descumprimento que comprometa a finalidade do contrato, como atrasos superiores a 15 (quinze) dias sem justificativa aceita, entrega de equipamentos que não atendam às especificações técnicas após substituição ou inexecução parcial que inviabilize o uso dos bens. A rescisão será precedida de notificação com prazo de 5 (cinco) dias para correção, salvo em casos de urgência justificada, conforme artigo 137 da Lei nº 14.133/2021.\n\n"
        "As sanções serão aplicadas de forma proporcional à gravidade da infração, garantindo-se à Contratada o direito ao contraditório e à ampla defesa em processo administrativo, nos termos do artigo 158 da Lei nº 14.133/2021. A Administração Pública poderá cumular as penalidades, quando cabível, desde que respeitados os limites legais e a razoabilidade, sendo os fatos devidamente motivados e registrados no processo. Os recursos provenientes de multas serão revertidos ao órgão contratante, conforme legislação vigente."
    )

    doc.add_paragraph(
        "13.2. Disposições Legais Aplicáveis\n"
        "Aplica-se o previsto na Lei nº 14.133, de 1º de abril de 2021, nos seguintes termos:\n\n"
        "Art. 155. O licitante ou o contratado será responsabilizado administrativamente pelas seguintes infrações:\n"
        "I - dar causa à inexecução parcial do contrato;\n"
        "II - dar causa à inexecução parcial do contrato que cause grave dano à Administração, ao funcionamento dos serviços públicos ou ao interesse coletivo;\n"
        "III - dar causa à inexecução total do contrato;\n"
        "IV - deixar de entregar a documentação exigida para o certame;\n"
        "V - não manter a proposta, salvo em decorrência de fato superveniente devidamente justificado;\n"
        "VI - não celebrar o contrato ou não entregar a documentação exigida para a contratação, quando convocado dentro do prazo de validade de sua proposta;\n"
        "VII - ensejar o retardamento da execução ou da entrega do objeto da licitação sem motivo justificado;\n"
        "VIII - apresentar declaração ou documentação falsa exigida para o certame ou prestar declaração falsa durante a licitação ou a execução do contrato;\n"
        "IX - fraudar a licitação ou praticar ato fraudulento na execução do contrato;\n"
        "X - comportar-se de modo inidôneo ou cometer fraude de qualquer natureza;\n"
        "XI - praticar atos ilícitos com vistas a frustrar os objetivos da licitação;\n"
        "XII - praticar ato lesivo previsto no art. 5º da Lei nº 12.846, de 1º de agosto de 2013.\n\n"
        "Art. 156. Serão aplicadas ao responsável pelas infrações administrativas previstas nesta Lei as seguintes sanções:\n"
        "I - advertência;\n"
        "II - multa;\n"
        "III - impedimento de licitar e contratar;\n"
        "IV - declaração de inidoneidade para licitar ou contratar.\n\n"
        "§ 1º Na aplicação das sanções serão considerados:\n"
        "I - a natureza e a gravidade da infração cometida;\n"
        "II - as peculiaridades do caso concreto;\n"
        "III - as circunstâncias agravantes ou atenuantes;\n"
        "IV - os danos que dela provierem para a Administração Pública;\n"
        "V - a implantação ou o aperfeiçoamento de programa de integridade, conforme normas e orientações dos órgãos de controle."
    )

    # 10. Condições de Recebimento dos Serviços
    add_heading("14. Condições de Recebimento dos Serviços", level=2)

    add_paragraph(
        "O recebimento dos serviços ocorrerá em duas etapas: provisória e definitiva, conforme previsto na Lei nº 14.133/2021. "
        "O recebimento provisório será realizado após a conclusão integral da instalação dos equipamentos, com a verificação do pleno funcionamento de todas as unidades, "
        "incluindo testes operacionais, ajustes, comissionamento técnico e validação da conformidade com o projeto básico."
    )

    add_paragraph(
        "Para fins de recebimento provisório, deverão ser apresentados os seguintes documentos: "
        "relatório técnico detalhado da execução, checklist de conformidade com as normas técnicas aplicáveis (ABNT, INMETRO, ANVISA), "
        "registros fotográficos da instalação e Anotação de Responsabilidade Técnica (ART) ou Termo de Responsabilidade Técnica (TRT) devidamente emitidos."
    )

    add_paragraph(
        "O recebimento definitivo será formalizado mediante vistoria técnica conclusiva, após o decurso do prazo de observação ou testes de desempenho, "
        "desde que não sejam constatadas falhas, vícios ou desconformidades. A aprovação será registrada por meio de termo específico emitido pelo fiscal do contrato, "
        "conforme o art. 140 da Lei nº 14.133/2021."
    )

    add_paragraph(
        "Caso sejam identificadas falhas ou não conformidades, a contratada será notificada e deverá corrigi-las no prazo de até 5 (cinco) dias úteis, salvo se, pela natureza dos serviços a corrigir, for tecnicamente justificado prazo superior, a ser previamente aprovado pelo fiscal do contrato."
    )



    # 11. Forma de Pagamento
    add_heading("15. Forma de Pagamento", level=2)

    add_paragraph(
        "O pagamento será efetuado mediante apresentação da Nota Fiscal eletrônica emitida pela contratada, após a execução integral dos serviços e aprovação do respectivo relatório técnico, checklist de conformidade e demais documentos exigidos, pelo fiscal designado. "
        "O prazo para pagamento será de até 10 (dez) dias úteis, contados a partir da data do aceite formal e da tramitação completa da documentação, observado o fluxo processual interno e a disponibilidade orçamentária e financeira da Administração."
    )

    add_paragraph(
        "O pagamento estará condicionado à manutenção da regularidade fiscal, trabalhista e previdenciária da contratada, conforme exigido na contratação pública. "
        "Em caso de descumprimento parcial das obrigações contratuais, a Administração poderá reter, total ou parcialmente, os valores devidos, até a completa regularização, conforme previsto no art. 137 da Lei nº 14.133/2021 e demais normativos aplicáveis."
    )



    # 12. Obrigações da Contratada
    add_heading("16. Obrigações da Contratada", level=2)

    add_paragraph(
        "A empresa contratada deverá cumprir integralmente as obrigações estabelecidas neste Termo de Referência e no contrato decorrente, durante a execução dos serviços, sob pena de aplicação das sanções administrativas previstas na legislação vigente:"
    )

    add_paragraph("• Executar os serviços de instalação com rigor técnico e observância às normas aplicáveis, especialmente as normas da ABNT (NBR 16401, NBR 13206, NBR 5410 e NBR 5419), recomendações dos fabricantes e boas práticas da engenharia de climatização;")

    add_paragraph("• Designar profissional legalmente habilitado e registrado no CREA ou CFT como responsável técnico pela obra, com presença obrigatória nas etapas críticas da instalação e emissão da respectiva ART (Anotação de Responsabilidade Técnica) ou TRT (Termo de Responsabilidade Técnica);")

    add_paragraph("• Nomear preposto formal que represente a empresa contratada junto ao órgão contratante durante toda a vigência do contrato, responsável por receber comunicações, prestar informações e adotar providências imediatas sempre que necessário;")

    add_paragraph("• Utilizar apenas materiais e equipamentos novos, certificados pelos órgãos competentes (INMETRO, ABNT ou similares), com garantia do fabricante e qualidade compatível com o uso contínuo em ambientes públicos;")

    add_paragraph("• Realizar testes de funcionamento, startup e comissionamento completo de todos os equipamentos instalados, entregando relatório técnico detalhado, com checklist de conformidade, registros fotográficos e assinatura do responsável técnico;")

    add_paragraph("• Preservar o local de execução dos serviços, adotando medidas preventivas para proteção da estrutura existente e responsabilizando-se pela limpeza final e remoção de entulhos, sob pena de retenção de valores contratuais;")

    add_paragraph("• Observar e fazer cumprir as normas de segurança do trabalho, fornecendo EPIs adequados à equipe de execução, além de garantir a integridade física dos trabalhadores, dos usuários do local e do patrimônio público;")

    add_paragraph("• Responder por vícios, defeitos ou danos decorrentes dos serviços prestados, conforme disposto no Código de Defesa do Consumidor (Lei nº 8.078/1990), devendo realizar as correções necessárias sem ônus para a Administração Pública;")

    add_paragraph("• Corrigir quaisquer inconformidades apontadas pelo fiscal do contrato ou por auditorias internas ou externas, no prazo máximo de 30 (trinta) dias a contar da notificação formal, sob pena de aplicação das penalidades contratuais;")

    add_paragraph("• Manter atualizadas e válidas todas as condições de habilitação jurídica, técnica, fiscal e trabalhista exigidas no processo licitatório, comunicando prontamente qualquer fato que comprometa sua regularidade;")

    add_paragraph("• Arcar com todas as despesas necessárias à execução dos serviços contratados, inclusive encargos trabalhistas, previdenciários, fiscais, comerciais, transporte, alimentação, seguro, fretes, equipamentos e quaisquer outras que não possam ser transferidas ao contratante;")

    add_paragraph("• Cumprir rigorosamente os prazos estabelecidos, sendo que os serviços deverão ser executados em até 30 (trinta) dias úteis, salvo prorrogação autorizada por justificativa técnica aceita pelo contratante;")

    add_paragraph("• Responder por quaisquer danos materiais ou morais causados direta ou indiretamente ao órgão contratante, a terceiros ou ao meio ambiente, em decorrência de falha, imperícia, negligência ou imprudência na execução contratual.")


    # 13. Obrigações do Contratante
    add_heading("17. Obrigações do Contratante", level=2)

    add_paragraph(
        "O órgão contratante compromete-se a cumprir as seguintes obrigações, visando garantir a regularidade, eficiência e legalidade na execução do contrato, conforme os princípios e diretrizes estabelecidos pela Lei nº 14.133/2021:"
    )

    add_paragraph("• Providenciar, de forma tempestiva, a formalização do contrato administrativo ou instrumento equivalente, em conformidade com os dispositivos legais e regulamentares aplicáveis;")

    add_paragraph("• Garantir a disponibilidade orçamentária e financeira necessária à execução contratual, nos termos da Lei de Responsabilidade Fiscal (Lei Complementar nº 101/2000), assegurando o pagamento das obrigações assumidas dentro dos prazos legais;")

    add_paragraph("• Designar formalmente um servidor público ou comissão para acompanhar, fiscalizar e avaliar os serviços executados, conforme determina o art. 117 da Lei nº 14.133/2021, atuando como interlocutor oficial junto à contratada e registrando todas as ocorrências relevantes no processo;")

    add_paragraph("• Disponibilizar previamente à execução dos serviços os documentos técnicos necessários, tais como o projeto básico, especificações técnicas, plantas e memoriais descritivos, bem como as áreas livres e acessíveis para instalação dos equipamentos;")

    add_paragraph("• Emitir a ordem de início dos serviços, após a assinatura do contrato e atendimento de todas as condições de habilitação e segurança por parte da contratada;")

    add_paragraph("• Fiscalizar ativamente o cumprimento do contrato, verificando a conformidade técnica e documental dos serviços prestados, e autorizando o pagamento apenas após o aceite formal, com base em relatório técnico aprovado e documentação exigida (como ART/TRT);")

    add_paragraph("• Comunicar formalmente à contratada, com registro em ata ou ofício, toda e qualquer falha, omissão ou não conformidade identificada, fixando prazo razoável para correção, conforme previsto no contrato e na legislação vigente;")

    add_paragraph("• Fornecer, sempre que solicitado, informações técnicas e administrativas que contribuam para o bom andamento dos serviços, esclarecendo dúvidas e promovendo condições adequadas para a execução contratual;")

    add_paragraph("• Zelar pelo cumprimento das obrigações recíprocas previstas no contrato, adotando as providências necessárias à solução de conflitos e à preservação do interesse público.")


    # 14. Garantia dos Serviços Prestados
    add_heading("18. Garantia dos Serviços Prestados", level=2)

    add_paragraph(
        "A contratada deverá garantir a integridade e o pleno funcionamento dos serviços executados pelo prazo mínimo de 12 (doze) meses, contados a partir da data do recebimento definitivo, nos termos do art. 137, § 3º, da Lei nº 14.133/2021. "
        "Durante esse período, a contratada deverá realizar, sem quaisquer ônus adicionais para a Administração, os reparos ou correções decorrentes de falhas na execução, vícios ocultos ou defeitos identificados no período de garantia."
    )

    add_paragraph(
        "Os materiais utilizados deverão possuir garantia mínima de 12 (doze) meses, fornecida pelo fabricante ou importador, conforme Código de Defesa do Consumidor (Lei nº 8.078/1990). "
        "Estão excluídos da cobertura da garantia danos ocasionados por mau uso, acidentes, intervenções de terceiros não autorizados ou descumprimento das recomendações técnicas de operação e manutenção."
    )


    # 16. Equipamentos e Materiais Técnicos
    add_heading("19. Equipamentos e Materiais Técnicos", level=2)
    add_paragraph(
        "Esta seção lista os equipamentos de climatização e renovação de ar por ambiente, com estimativa consolidada de materiais baseada em "
        "cálculos de carga térmica e vazão de ar. A distância média considerada é de 25 metros por aparelho Split."
    )
    add_paragraph(
        "A equipe técnica deve realizar visita prévia para confirmar distâncias e condições. Materiais adicionais (ex.: suportes extras, dutos) "
        "serão considerados miscelâneas, limitadas a 10% do valor total, e registrados no relatório final."
    )

    aparelhos_totais = []
    for ambiente in ambientes:
        add_heading(f"Ambiente: {ambiente.nome_ambiente}", level=3)

        try:
            dados_term = DadosTermicos.objects.get(ambiente=ambiente)
        except DadosTermicos.DoesNotExist:
            dados_term = None

        caminho_base = os.path.join(settings.BASE_DIR, f"arquivos_cargas_termicas/projeto_{projeto.nome_projeto}")
        caminho_arquivo = os.path.join(caminho_base, f"{ambiente.nome_ambiente}_resultados_termicos.xlsx")

        carga_termica = 0
        if os.path.exists(caminho_arquivo):
            try:
                df = pd.read_excel(caminho_arquivo, engine="openpyxl")
                if "Carga Térmica Total Ambiente" in df.columns:
                    carga_termica = df["Carga Térmica Total Ambiente"].max()
            except Exception as e:
                logger.error(f"Erro ao ler arquivo térmico para {ambiente.nome_ambiente}: {str(e)}")

        tipo = ambiente.tipo_aparelho or "hiwall"
        aparelhos = determinar_aparelho(carga_termica, tipo)

        if isinstance(aparelhos, list) and aparelhos:
            aparelhos_totais.extend(aparelhos)
            add_paragraph("Equipamentos de Ar Condicionado a serem instalados:")
            tabela = doc.add_table(rows=1, cols=6)
            tabela.style = "Table Grid"
            hdr = tabela.rows[0].cells
            headers = ["Modelo", "Cap. Resf. (BTU/h)", "Cap. Aq. (BTU/h)", "Alimentação", "Tubulação", "Potência (W)"]
            for i, h in enumerate(headers):
                hdr[i].text = h
            add_table_style(tabela)

            for ap in aparelhos:
                row = tabela.add_row().cells
                row[0].text = ap.get('modelo', '-')
                row[1].text = str(ap.get('capacidade_resfriamento_btu', '-'))
                row[2].text = str(ap.get('capacidade_aquecimento_btu', '-'))
                row[3].text = ap.get('fonte_alimentacao', '-')
                row[4].text = ap.get('tubulacao_refrigerante_liquido_gas_mm', '-')
                row[5].text = str(ap.get('potencia_motor_w', '-'))
                add_table_style(tabela)

        else:
            add_paragraph("Nenhum equipamento de climatização definido.")

        if dados_term:
            info_ren = escolher_aparelho_renovacao(
                dados_term.area_piso or 0,
                dados_term.pe_direito or 0,
                dados_term.numero_pessoas or 0,
                dados_term.taxa_renovacao or 0
            )
            comb_renov = info_ren.get("melhor_comb", [])
            if comb_renov:
                add_paragraph("Equipamentos de Renovação de Ar a serem instalados:")
                tabela2 = doc.add_table(rows=1, cols=6)
                tabela2.style = "Table Grid"
                hdr = tabela2.rows[0].cells
                headers = ["Modelo", "Vazão (m³/h)", "Pressão (mmCA)", "Ruído (dBA)", "Potência (W)", "Velocidade"]
                for i, h in enumerate(headers):
                    hdr[i].text = h
                add_table_style(tabela2)

                for rn in comb_renov:
                    velocidades = rn.get('velocidades', [])
                    vel = velocidades[-1] if velocidades else {}
                    row = tabela2.add_row().cells
                    row[0].text = rn.get('modelo', '-')
                    row[1].text = str(vel.get('vazao_maxima_m3h', '-'))
                    row[2].text = str(vel.get('pressao_maxima_mmca', '-'))
                    row[3].text = str(vel.get('nivel_pressao_sonora_dba', '-'))
                    row[4].text = str(vel.get('potencia_motor_w', '-'))
                    row[5].text = vel.get('nome', '-')
                    add_table_style(tabela2)
            else:
                add_paragraph("Nenhum equipamento de renovação definido para este ambiente.")
        else:
            add_paragraph("Nenhum equipamento de renovação definido para este ambiente.")


    # Tabela de Materiais Concatenada
    if aparelhos_totais:
        add_paragraph("Lista Consolidada de Materiais para Todos os Equipamentos:")
        materiais_consolidados = consolidar_materiais(aparelhos_totais)
        tabela_materiais = doc.add_table(rows=1, cols=3)
        tabela_materiais.style = "Table Grid"
        hdr_materiais = tabela_materiais.rows[0].cells
        headers_materiais = ["Item", "Descrição", "Quantidade"]
        for i, h in enumerate(headers_materiais):
            hdr_materiais[i].text = h
        add_table_style(tabela_materiais)

        for item_num, desc, qtd in materiais_consolidados:
            row = tabela_materiais.add_row().cells
            row[0].text = str(item_num)
            row[1].text = desc
            row[2].text = qtd
            add_table_style(tabela_materiais)


    add_heading("20. Do Foro", level=2)

    doc.add_paragraph("O foro será o da comarca da prefeitura contratante, a ser especificado no edital.")

    # Assinaturas (ajustado com menos espaçamento entre as seções)
    add_heading("21. Assinaturas", level=2)
    add_paragraph("Por estarem de acordo, as partes assinam o presente documento:")

    # Linha e bloco do órgão contratante
    add_paragraph("_" * 70)
    add_paragraph("Responsável pelo Órgão Contratante")
    add_paragraph("Nome: ____________________________    Cargo: ____________________________    Data: ____/____/______")

    # Linha e bloco da empresa contratada
    add_paragraph("_" * 70)
    add_paragraph("Representante da Empresa Contratada")
    add_paragraph("Nome: ____________________________    Cargo: ____________________________    Data: ____/____/______")

    # Linha e bloco do responsável técnico
    add_paragraph("_" * 70)
    add_paragraph("Responsável Técnico da Contratada")
    add_paragraph("Nome: ____________________________    Registro CREA/CFT: _________________    Data: ____/____/______")


    buffer = io.BytesIO()
    doc.save(buffer)
    buffer.seek(0)
    nome_arq = f"termo_instalacao_{projeto.nome_projeto}.docx"
    return HttpResponse(
        buffer.read(),
        content_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document',
        headers={'Content-Disposition': f'attachment; filename={nome_arq}'}
    )
