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

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, 14), dpi=300)

c_hull = '#0F2B48'
c_wl = '#0284C7'
c_wood = '#D97706'
c_grid = '#94A3B8'

# Balizas de B0 (Popa) até B8 (Proa)
# Estações a cada 1,0 m ao longo dos 8,0 m de linha d'água
stations_info = [
    ("BALIZA 0 (Espelho de Popa - x = 0,0 m)", 0.38, 0.50, 0.15, "Popa reta / Suporte do motor"),
    ("BALIZA 1 (Praça de Máquinas - x = 1,0 m)", 0.40, 0.56, 0.18, "Alojamento do motor e eixo"),
    ("BALIZA 2 (Porão de Peixe Ré - x = 2,0 m)", 0.41, 0.60, 0.22, "Porão térmico de pescado"),
    ("BALIZA 3 (Porão de Peixe Vante - x = 3,0 m)", 0.41, 0.60, 0.24, "Porão térmico e antepara"),
    ("BALIZA 4 (Meia-Nau / Travessa - x = 4,0 m)", 0.41, 0.60, 0.25, "Seção mestra / Maior volume"),
    ("BALIZA 5 (Acomodações / Tanques - x = 5,0 m)", 0.40, 0.58, 0.30, "Beliche e tanque estrutural"),
    ("BALIZA 6 (Cabine de Vante - x = 6,0 m)", 0.36, 0.52, 0.45, "Entrada de proa / V aberto"),
    ("BALIZA 7 (Transição de Proa - x = 7,0 m)", 0.28, 0.42, 0.65, "V profundo corta-ondas"),
    ("BALIZA 8 (Roda de Proa - x = 8,0 m)", 0.14, 0.25, 0.85, "Proa fina de entrada")
]

for idx, (title, w_max_val, d, v_fact, desc) in enumerate(stations_info):
    ax = axs[idx // 3, idx % 3]
    
    # Grid e eixos de centro
    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(0.9, color='#475569', lw=1.0, linestyle=':', label="Linha de Convés (+0,90m)")
    ax.axhline(-d, color='#B91C1C', lw=1.0, linestyle=':', label=f"Fundo / Quilha (-{d:.2f}m)")
    
    # Coordenadas do molde da caverna (ambos os lados: Bombordo e Boreste da canoa)
    ys = np.linspace(-d, 0.9, 80)
    
    if idx <= 4: # Popa até Meia-Nau
        half_w = (w_max_val * np.power(np.maximum(0, (ys + d)/(0.9 + d)), 0.45) * (1 - v_fact * np.exp(-3*(ys+d))))
    else: # Meia-Nau até Proa
        half_w = (w_max_val * np.power(np.maximum(0, (ys + d)/(0.9 + d)), 0.6) * (1 - v_fact * np.exp(-2.5*(ys+d))))
    
    # Preenchimento representando a chapa de compensado cortada
    ax.fill_betweenx(ys, -half_w, half_w, color='#FEF3C7', edgecolor=c_wood, lw=2.0, alpha=0.85)
    
    # Linhas de referência de corte (entalhe para quilha e longarinas)
    # Entalhe central da quilha (fundo)
    ax.add_patch(patches.Rectangle((-0.04, -d), 0.08, 0.08, facecolor='white', edgecolor='black', lw=1))
    
    # Entalhes das longarinas
    if idx <= 6:
        ax.add_patch(patches.Rectangle((-half_w[20]-0.02, ys[20]-0.02), 0.04, 0.04, facecolor='white', edgecolor='black', lw=0.8))
        ax.add_patch(patches.Rectangle((half_w[20]-0.02, ys[20]-0.02), 0.04, 0.04, facecolor='white', edgecolor='black', lw=0.8))
        
    # Cotas principais escritas no molde
    largura_total = 2 * half_w[-1] # na altura do convés
    ax.text(0, 0.95, f"Largura Topo: {largura_total:.2f} m", ha='center', va='bottom', fontsize=7.5, fontweight='bold', color=c_hull)
    ax.text(0, -d - 0.12, f"Profundidade: {d + 0.9:.2f} m", ha='center', va='top', fontsize=7.5, fontweight='bold', color='#B91C1C')
    
    ax.set_title(title, fontsize=8.5, fontweight='bold', color=c_hull, pad=4)
    ax.text(0, 0.4, desc, ha='center', va='center', fontsize=7, color='#475569', style='italic')
    
    ax.set_xlim(-0.55, 0.55)
    ax.set_ylim(-0.85, 1.15)
    ax.set_aspect('equal')
    ax.set_xlabel("Largura (m)", fontsize=7)
    ax.set_ylabel("Altura (m)", fontsize=7)

plt.suptitle("GABARITOS DE CORTE DAS CAVERNAS / BALIZAS (MOLDES DE MADEIRA EM ESCALA)\nPOWERCAT BOAT 8,50 m — Semi-Casco (Canoa)", fontsize=12, fontweight='bold', color=c_hull, y=0.99)
plt.tight_layout()

output_gabarito = "/home/magdalena/eee/alunos/alberico-de-carvalho-santiago/gabarito_cavernas_corte_madeira.png"
plt.savefig(output_gabarito, dpi=300, bbox_inches='tight')
plt.close()
print("Gabarito de corte gerado com sucesso!")
