import matplotlib.pyplot as plt
import matplotlib.patches as patches
import numpy as np

# Estilo naval profissional
plt.style.use('seaborn-v0_8-whitegrid' if 'seaborn-v0_8-whitegrid' in plt.style.available else 'default')
fig, axs = plt.subplots(3, 3, figsize=(16, 15), dpi=300)

c_hull = '#0F2B48'      # Azul Marinho Escuro
c_wl = '#0284C7'        # Linha d'Água (WL)
c_wood = '#D97706'      # Madeira / Molde
c_bg_mold = '#FEF3C7'   # Fundo do molde de madeira
c_flange = '#059669'    # Flange do molde
c_cut = '#DC2626'       # Linha de corte externa do molde

# 9 Balizas/Cavernas do Molde (B0 a B8) ao longo dos 7,80 m de LWL (espaçamento de 0,975 m)
# Dimensões externas da forma para laminação em PRFV
stations_plug = [
    ("MOLDE B0 (Espelho de Popa - x=0,0 m)", 1.20, 0.65, 0.75, "Popa larga c/ rebaixo do túnel do eixo"),
    ("MOLDE B1 (Praça de Ré - x=0,97 m)", 1.32, 0.72, 0.76, "Fundo plano, bojo suave e quilhão skeg"),
    ("MOLDE B2 (Porão de Peixe - x=1,95 m)", 1.42, 0.75, 0.78, "Seção de sustentação do porão térmico"),
    ("MOLDE B3 (Meia-Nau Ré - x=2,92 m)", 1.45, 0.75, 0.82, "Boca máxima (2,90 m) e berço do motor"),
    ("MOLDE B4 (Meia-Nau Mestra - x=3,90 m)", 1.45, 0.73, 0.88, "Seção mestra / Transição de fundo"),
    ("MOLDE B5 (Meia-Nau Vante - x=4,87 m)", 1.40, 0.68, 0.96, "Início do V profundo e spray rail"),
    ("MOLDE B6 (Cabine Vante - x=5,85 m)", 1.25, 0.58, 1.08, "Entrada de proa e acomodações"),
    ("MOLDE B7 (Transição Proa - x=6,82 m)", 0.90, 0.45, 1.22, "V profundo corta-marola"),
    ("MOLDE B8 (Roda de Proa - x=7,80 m)", 0.35, 0.25, 1.35, "Bico de entrada e roda de proa (Stem)")
]

for idx, (title, half_w, d, deck_h, desc) in enumerate(stations_plug):
    ax = axs[idx // 3, idx % 3]
    
    # Eixos de referência
    ax.axvline(0, color='black', lw=1.2, linestyle='-', label="Linha de Centro (CL)")
    ax.axhline(0, color=c_wl, lw=1.5, linestyle='--', label="Linha d'Água (WL = 0)")
    ax.axhline(deck_h, color='#475569', lw=1.0, linestyle=':', label=f"Linha de Convés (+{deck_h:.2f}m)")
    ax.axhline(-d, color='#B91C1C', lw=1.0, linestyle=':', label=f"Fundo / Quilha (-{d:.2f}m)")
    
    # Curva da caverna do molde macho / fêmea
    ys = np.linspace(-d, deck_h, 80)
    
    if idx <= 4: # Popa até Meia-Nau: fundo plano com bojo redondo
        w_curve = half_w * np.power(np.maximum(0, (ys + d)/(deck_h + d)), 0.35) * (1 - 0.15 * np.exp(-3*(ys+d)))
    else: # Meia-Nau até Proa: V profundo com alargamento para o convés
        w_curve = half_w * np.power(np.maximum(0, (ys + d)/(deck_h + d)), 0.65) * (1 - 0.25 * np.exp(-2*(ys+d)))
    
    # Preenchimento da chapa do molde
    ax.fill_betweenx(ys, -w_curve, w_curve, color=c_bg_mold, edgecolor=c_cut, lw=2.0, alpha=0.9)
    
    # Flange superior do molde (borda de desmoldagem de 10 cm acima do convés)
    ax.plot([-w_curve[-1] - 0.10, -w_curve[-1]], [deck_h + 0.08, deck_h], color=c_flange, lw=3)
    ax.plot([w_curve[-1], w_curve[-1] + 0.10], [deck_h, deck_h + 0.08], color=c_flange, lw=3)
    
    # Entalhes para sarrafos de ripamento longitudinal (para ripamento do modelo em réguas de 2x1 cm)
    for sample_i in [15, 35, 55, 70]:
        y_p = ys[sample_i]
        w_p = w_curve[sample_i]
        ax.add_patch(patches.Rectangle((-w_p - 0.015, y_p - 0.01), 0.03, 0.02, facecolor='white', edgecolor='black', lw=0.6))
        ax.add_patch(patches.Rectangle((w_p - 0.015, y_p - 0.01), 0.03, 0.02, facecolor='white', edgecolor='black', lw=0.6))
        
    # Encaixe inferior da quilha mestra / skeg do molde (12 x 10 cm)
    ax.add_patch(patches.Rectangle((-0.06, -d), 0.12, 0.10, facecolor='white', edgecolor='black', lw=1))
    
    # Cotas principais
    boca_total = 2 * half_w
    ax.text(0, deck_h + 0.08, f"Boca Molde: {boca_total:.2f} m", ha='center', va='bottom', fontsize=7.5, fontweight='bold', color=c_hull)
    ax.text(0, -d - 0.14, f"Profundidade: {d + deck_h:.2f} m", ha='center', va='top', fontsize=7.2, fontweight='bold', color='#B91C1C')
    ax.text(0, (deck_h - d)/2, desc, ha='center', va='center', fontsize=6.5, color='#475569', style='italic')

    ax.set_title(title, fontsize=8, fontweight='bold', color=c_hull, pad=3)
    ax.set_xlim(-1.75, 1.75)
    ax.set_ylim(-1.05, 1.65)
    ax.set_aspect('equal')
    ax.set_xlabel("Largura (m)", fontsize=7)
    ax.set_ylabel("Altura (m)", fontsize=7)

plt.suptitle("GABARITOS DAS CAVERNAS DO MODELO / FORMA PARA LAMINAÇÃO EM FIBRA DE VIDRO (PRFV)\nLOBSTER BOAT 8,50 m × 2,90 m — Molde Macho / Picadeiro de Ripamento", fontsize=11, fontweight='bold', color=c_hull, y=0.99)
plt.tight_layout()

output_molde = "/home/magdalena/eee/alunos/alberico-de-carvalho-santiago/gabarito_cavernas_molde_fibra.png"
plt.savefig(output_molde, dpi=300, bbox_inches='tight')
plt.close()
print("Cavernas da forma para fibra de vidro geradas com sucesso!")
