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

# Estilo técnico naval
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 Profundo
c_wl = '#0284C7'        # Linha d'Água (WL)
c_wood = '#D97706'      # Tom madeira/compensado
c_bg_wood = '#FEF3C7'   # Fundo madeira cortada
c_keel = '#1E293B'      # Quilha
c_dim = '#B91C1C'       # Linha de corte/cotas vermelhas

# 9 Estações de Balizas (B0 a B8) ao longo dos 7,80 m de Linha d'Água (espaçamento ~0,975 m)
# Parâmetros: (Nome, Meia-Largura Topo, Profundidade Fundo, Bojo/Chine, Altura Convés, Descrição)
stations_lobster = [
    ("BALIZA 0 (Espelho de Popa - x=0,0 m)", 1.20, 0.65, 0.15, 0.75, "Popa larga / Suporte do leme e hélice"),
    ("BALIZA 1 (Praça de Pesca Ré - x=0,97 m)", 1.32, 0.72, 0.22, 0.76, "Praça de ré e túnel do eixo"),
    ("BALIZA 2 (Porão de Peixe Ré - x=1,95 m)", 1.42, 0.75, 0.30, 0.78, "Porão térmico isolado (1.000 kg)"),
    ("BALIZA 3 (Porão de Peixe Vante - x=2,92 m)", 1.45, 0.75, 0.35, 0.82, "Porão térmico e antepara estanque"),
    ("BALIZA 4 (Meia-Nau / Mestra - x=3,90 m)", 1.45, 0.73, 0.42, 0.88, "Seção Mestra / Maior boca (2,90 m)"),
    ("BALIZA 5 (Praça de Máquinas / Comando - x=4,87 m)", 1.40, 0.68, 0.50, 0.96, "Motor Diesel Central (90-130 HP)"),
    ("BALIZA 6 (Cabine de Vante - x=5,85 m)", 1.25, 0.58, 0.62, 1.08, "Beliches em V e armários"),
    ("BALIZA 7 (Transição de Proa - x=6,82 m)", 0.90, 0.45, 0.75, 1.22, "V profundo de corte de onda"),
    ("BALIZA 8 (Roda de Proa - x=7,80 m)", 0.35, 0.25, 0.88, 1.35, "Entrada de proa lançada e fina")
]

for idx, (title, half_w, d, v_fact, deck_h, desc) in enumerate(stations_lobster):
    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"Convés (+{deck_h:.2f}m)")
    ax.axhline(-d, color='#B91C1C', lw=1.0, linestyle=':', label=f"Fundo (-{d:.2f}m)")
    
    # Gerar curva suave do formato Lobster Monocasco (Semi-deslocamento com bojo redondo)
    ys = np.linspace(-d, deck_h, 80)
    
    if idx <= 4: # Popa até Meia-nau (fundo chato 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 que abre para cima)
        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 representando a chapa de compensado/molde cortado
    ax.fill_betweenx(ys, -w_curve, w_curve, color=c_bg_wood, edgecolor=c_wood, lw=2.0, alpha=0.9)
    
    # Entalhes para montagem na oficina:
    # 1. Entalhe central da quilha (fundo): 10 x 12 cm
    ax.add_patch(patches.Rectangle((-0.06, -d), 0.12, 0.10, facecolor='white', edgecolor='black', lw=1))
    
    # 2. Entalhes das longarinas estruturais (bojo e convés): 5 x 5 cm
    if idx >= 1 and idx <= 7:
        y_pos1 = ys[25]
        w_pos1 = w_curve[25]
        ax.add_patch(patches.Rectangle((-w_pos1 - 0.025, y_pos1 - 0.025), 0.05, 0.05, facecolor='white', edgecolor='black', lw=0.8))
        ax.add_patch(patches.Rectangle((w_pos1 - 0.025, y_pos1 - 0.025), 0.05, 0.05, facecolor='white', edgecolor='black', lw=0.8))
        
        y_pos2 = ys[55]
        w_pos2 = w_curve[55]
        ax.add_patch(patches.Rectangle((-w_pos2 - 0.025, y_pos2 - 0.025), 0.05, 0.05, facecolor='white', edgecolor='black', lw=0.8))
        ax.add_patch(patches.Rectangle((w_pos2 - 0.025, y_pos2 - 0.025), 0.05, 0.05, facecolor='white', edgecolor='black', lw=0.8))

    # Textos de medidas no molde
    boca_total = 2 * half_w
    ax.text(0, deck_h + 0.06, f"Largura Topo: {boca_total:.2f} m", ha='center', va='bottom', fontsize=8, fontweight='bold', color=c_hull)
    ax.text(0, -d - 0.14, f"Profundidade Total: {d + deck_h:.2f} m", ha='center', va='top', fontsize=7.5, fontweight='bold', color=c_dim)
    ax.text(0, (deck_h - d)/2, desc, ha='center', va='center', fontsize=6.8, color='#475569', style='italic')

    ax.set_title(title, fontsize=8.5, fontweight='bold', color=c_hull, pad=4)
    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 DE CORTE DAS 9 CAVERNAS / BALIZAS (MOLDES EM ESCALA)\nLOBSTER BOAT MONOCASCO 8,50 m × 2,90 m — Semi-Deslocamento Pesqueiro", fontsize=12, fontweight='bold', color=c_hull, y=0.99)
plt.tight_layout()

output_cavernas = "/home/magdalena/eee/alunos/alberico-de-carvalho-santiago/gabarito_cavernas_lobster_monocasco.png"
plt.savefig(output_cavernas, dpi=300, bbox_inches='tight')
plt.close()
print("Cavernas do Lobster Monocasco geradas com sucesso!")
