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
c_wl = '#0284C7'        # Linha d'Água (WL)
c_wood = '#D97706'      # Tom madeira/compensado
c_bg_wood = '#FEF3C7'   # Fundo madeira
c_cut = '#DC2626'       # Linha de corte
c_chine = '#2563EB'     # Chine

# 9 Estações de Balizas (B0 a B8) ao longo dos 7,80 m de LWL (espaçamento de 0,975 m)
# Dimensões do Casco em V (Deep-V / Modified-V): Boca = 2,70 m | Pontal = 1,40 m
# Formato: V facetado com chine e deadrise progressivo (17° na popa até 48° na proa)
stations_v_hull = [
    ("BALIZA 0 (Espelho de Popa - x=0,0 m)", 1.25, 0.48, 0.16, 0.85, "Deadrise 17° / Suporte do motor"),
    ("BALIZA 1 (Praça de Ré - x=0,97 m)", 1.30, 0.50, 0.18, 0.86, "Deadrise 18° / Fundo em V planeio"),
    ("BALIZA 2 (Tanques / Porão - x=1,95 m)", 1.34, 0.52, 0.20, 0.88, "Deadrise 20° / Sustentação dinâmica"),
    ("BALIZA 3 (Meia-Nau Ré - x=2,92 m)", 1.35, 0.55, 0.22, 0.92, "Deadrise 22° / Boca máxima (2,70 m)"),
    ("BALIZA 4 (Meia-Nau Mestra - x=3,90 m)", 1.35, 0.58, 0.25, 0.98, "Deadrise 25° / Seção mestra"),
    ("BALIZA 5 (Posto de Comando - x=4,87 m)", 1.30, 0.55, 0.28, 1.05, "Deadrise 30° / Entrada de marola"),
    ("BALIZA 6 (Cabine de Vante - x=5,85 m)", 1.15, 0.48, 0.32, 1.15, "Deadrise 36° / Acomodações de proa"),
    ("BALIZA 7 (Transição de Proa - x=6,82 m)", 0.85, 0.38, 0.38, 1.28, "Deadrise 42° / V profundo"),
    ("BALIZA 8 (Roda de Proa - x=7,80 m)", 0.38, 0.22, 0.45, 1.40, "Deadrise 48° / Bico corta-onda")
]

for idx, (title, half_w, d, chine_offset, deck_h, desc) in enumerate(stations_v_hull):
    ax = axs[idx // 3, idx % 3]
    
    # Eixos de centro e 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"Quilha (-{d:.2f}m)")
    
    # Geometria do Casco em V (Fundo em V com Chine vivo)
    # Pontos de meio-molde:
    # 1. Quilha central no fundo: (0, -d)
    # 2. Chine (aresta do fundo): (chine_w, chine_y)
    # 3. Borda superior do convés: (half_w, deck_h)
    
    chine_w = half_w * 0.92
    chine_y = -d + chine_offset
    
    # Polígono da caverna em V
    xs_poly = [-half_w, -chine_w, 0, chine_w, half_w, -half_w]
    ys_poly = [deck_h, chine_y, -d, chine_y, deck_h, deck_h]
    
    ax.fill(xs_poly, ys_poly, color=c_bg_wood, edgecolor=c_cut, lw=2.0, alpha=0.9)
    
    # Entalhes para montagem no picadeiro:
    # 1. Entalhe central da quilha (fundo): 8 x 8 cm
    ax.add_patch(patches.Rectangle((-0.04, -d), 0.08, 0.08, facecolor='white', edgecolor='black', lw=1))
    
    # 2. Entalhes do chine nas arestas: 4 x 4 cm
    ax.add_patch(patches.Rectangle((-chine_w - 0.02, chine_y - 0.02), 0.04, 0.04, facecolor='white', edgecolor='black', lw=0.8))
    ax.add_patch(patches.Rectangle((chine_w - 0.02, chine_y - 0.02), 0.04, 0.04, facecolor='white', edgecolor='black', lw=0.8))
    
    # 3. Entalhe das longarinas do costado
    if idx >= 2 and idx <= 6:
        y_side = (deck_h + chine_y) / 2
        w_side = (half_w + chine_w) / 2
        ax.add_patch(patches.Rectangle((-w_side - 0.02, y_side - 0.02), 0.04, 0.04, facecolor='white', edgecolor='black', lw=0.8))
        ax.add_patch(patches.Rectangle((w_side - 0.02, y_side - 0.02), 0.04, 0.04, facecolor='white', edgecolor='black', lw=0.8))

    # Textos de cotas no molde
    largura_total = 2 * half_w
    ax.text(0, deck_h + 0.06, f"Largura Topo: {largura_total:.2f} m", ha='center', va='bottom', fontsize=7.5, fontweight='bold', color=c_hull)
    ax.text(chine_w + 0.03, chine_y, f"Chine: {chine_w:.2f}m", ha='left', va='center', fontsize=6.5, color='#B45309')
    ax.text(0, -d - 0.12, 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.8, color='#475569', style='italic')

    ax.set_title(title, fontsize=8, fontweight='bold', color=c_hull, pad=3)
    ax.set_xlim(-1.65, 1.65)
    ax.set_ylim(-0.95, 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 — CASCO EM V MODERNO (8,50 m × 2,70 m)\nDeadrise Progressivo (17° na Popa até 48° na Proa) com Hard Chine", fontsize=11, fontweight='bold', color=c_hull, y=0.99)
plt.tight_layout()

output_v_cavernas = "/home/magdalena/eee/alunos/alberico-de-carvalho-santiago/gabarito_cavernas_casco_v_8_5m.png"
plt.savefig(output_v_cavernas, dpi=300, bbox_inches='tight')
plt.close()
print("Gabarito das cavernas em V gerado com sucesso!")
