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

# Configurar prancha técnica na Escala 1:25
plt.style.use('seaborn-v0_8-whitegrid' if 'seaborn-v0_8-whitegrid' in plt.style.available else 'default')
fig = plt.figure(figsize=(18, 14), dpi=300)

c_hull = '#0F2B48'      # Azul Marinho
c_wl = '#0284C7'        # Linha d'Água (WL)
c_wood = '#D97706'      # Madeira
c_bg_wood = '#FEF3C7'   # Fundo madeira
c_cut = '#DC2626'       # Linha de corte
c_pic = '#1E293B'       # Linhas do picadeiro

# -------------------------------------------------------------------------
# PARTE 1: GABARITOS DAS 9 CAVERNAS NA ESCALA 1:25 (1 m real = 4,0 cm no papel)
# -------------------------------------------------------------------------
# (Nome, half_w_m, d_m, chine_offset_m, deck_h_m, deadrise_deg)
stations_1_25 = [
    ("B0 (Popa - x=0,0m)", 1.25, 0.48, 0.16, 0.85, 17),
    ("B1 (Ré - x=0,97m)", 1.30, 0.50, 0.18, 0.86, 18),
    ("B2 (Porão - x=1,95m)", 1.34, 0.52, 0.20, 0.88, 20),
    ("B3 (Meia-Nau - x=2,92m)", 1.35, 0.55, 0.22, 0.92, 22),
    ("B4 (Mestra - x=3,90m)", 1.35, 0.58, 0.25, 0.98, 25),
    ("B5 (Comando - x=4,87m)", 1.30, 0.55, 0.28, 1.05, 30),
    ("B6 (Cabine - x=5,85m)", 1.15, 0.48, 0.32, 1.15, 36),
    ("B7 (Transição - x=6,82m)", 0.85, 0.38, 0.38, 1.28, 42),
    ("B8 (Proa - x=7,80m)", 0.38, 0.22, 0.45, 1.40, 48)
]

for idx, (title, half_w, d, chine_offset, deck_h, deadrise) in enumerate(stations_1_25):
    ax = plt.subplot2grid((4, 3), (idx // 3, idx % 3))
    
    ax.axvline(0, color='black', lw=1.0, linestyle='-')
    ax.axhline(0, color=c_wl, lw=1.2, linestyle='--')
    ax.axhline(deck_h, color='#475569', lw=0.8, linestyle=':')
    ax.axhline(-d, color='#B91C1C', lw=0.8, linestyle=':')
    
    chine_w = half_w * 0.92
    chine_y = -d + chine_offset
    
    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=1.5, alpha=0.9)
    
    # Entalhes
    ax.add_patch(patches.Rectangle((-0.04, -d), 0.08, 0.08, 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.6))
    ax.add_patch(patches.Rectangle((chine_w - 0.02, chine_y - 0.02), 0.04, 0.04, facecolor='white', edgecolor='black', lw=0.6))
    
    # Medidas na Escala 1:25 (1 m = 4,0 cm = 40 mm)
    largura_real = 2 * half_w
    largura_1_25 = largura_real * 4.0 # em cm
    profundidade_real = d + deck_h
    profundidade_1_25 = profundidade_real * 4.0 # em cm
    
    ax.text(0, deck_h + 0.05, f"Boca: {largura_real:.2f} m ({largura_1_25:.2f} cm em 1:25)", ha='center', va='bottom', fontsize=6.8, fontweight='bold', color=c_hull)
    ax.text(chine_w + 0.03, chine_y, f"Chine:\n{chine_w*4.0:.2f}cm", ha='left', va='center', fontsize=5.8, color='#B45309')
    ax.text(0, -d - 0.10, f"Prof: {profundidade_real:.2f} m ({profundidade_1_25:.2f} cm em 1:25)", ha='center', va='top', fontsize=6.5, fontweight='bold', color='#B91C1C')
    ax.text(0, (deck_h - d)/2, f"{title.split(' ')[0]} | {deadrise}°", ha='center', va='center', fontsize=6.8, fontweight='bold', color='#1E3A8A')

    ax.set_title(title, fontsize=7.5, fontweight='bold', color=c_hull, pad=2)
    ax.set_xlim(-1.60, 1.60)
    ax.set_ylim(-0.90, 1.55)
    ax.set_aspect('equal')
    ax.axis('off')

# -------------------------------------------------------------------------
# PARTE 2: DESENHO TÉCNICO COMPLETO DO PICADEIRO (MONTAGEM EM ESCALA 1:25)
# -------------------------------------------------------------------------
ax_pic = plt.subplot2grid((4, 3), (3, 0), colspan=3)
ax_pic.set_title("PLANO DE PICADEIRO (BUILDING JIG / STRONG-BACK) — MONTAGEM INVERTIDA DAS 9 CAVERNAS\nEscala 1:25 | Distância entre Balizas: 0,975 m real = 3,90 cm no picadeiro | Linha de Nível (Linha d'Água) e Prumo", fontsize=9.5, fontweight='bold', color=c_hull, pad=8)

# Vigas longitudinais do picadeiro (Strongback) em madeira - Nível de Referência +1,60 m
ax_pic.fill([-0.5, 8.5, 8.5, -0.5], [1.50, 1.50, 1.65, 1.65], color='#D97706', edgecolor='black', lw=1.2, label="Viga Mestra do Picadeiro (Strongback Nivelado)")
ax_pic.text(4.0, 1.57, "VIGA LONGA DO PICADEIRO (STRONGBACK) — NÍVEL ZERO DE MONTAGEM", ha='center', va='center', fontsize=7.5, fontweight='bold', color='white')

# Pernas de apoio do picadeiro no chão
for leg_x in [-0.2, 2.0, 4.0, 6.0, 8.2]:
    ax_pic.fill([leg_x - 0.08, leg_x + 0.08, leg_x + 0.08, leg_x - 0.08], [1.50, 1.50, 2.10, 2.10], color='#94A3B8', edgecolor='black', lw=1.0)
ax_pic.plot([-0.6, 8.6], [2.10, 2.10], color='black', lw=2.0) # Piso da oficina
ax_pic.text(4.0, 2.18, "PISO NIVELADO DA OFICINA", ha='center', fontsize=7, color='black', fontweight='bold')

# Linha d'Água de Referência (WL = 0)
ax_pic.axhline(0, color=c_wl, lw=1.5, linestyle='--', label="Linha d'Água de Projeto (WL = 0,00 m)")

# Desenhar as 9 cavernas montadas de cabeça para baixo no picadeiro
x_positions = np.linspace(0, 7.80, 9)
for i, (name_st, half_w_m, d_m, chine_off, deck_h_m, deadr) in enumerate(stations_1_25):
    xp = x_positions[i]
    # Linha da caverna descendo da viga do picadeiro (deck_h até -d)
    ax_pic.plot([xp, xp], [1.50, deck_h_m], color='#B45309', lw=2.5, linestyle='-') # Perna de fixação
    ax_pic.plot([xp, xp], [deck_h_m, -d_m], color='#DC2626', lw=3.0) # Caverna
    # Apoio do fundo / quilha
    ax_pic.plot([xp - 0.15, xp + 0.15], [-d_m, -d_m], color='#0F172A', lw=2.5)
    ax_pic.text(xp, 1.40, f"B{i}", ha='center', va='top', fontsize=7.5, fontweight='bold', color='#B45309')
    ax_pic.text(xp, -d_m - 0.12, f"-{d_m:.2f}m", ha='center', va='top', fontsize=6.5, color='#B91C1C')

# Linha da Quilha (Keel Line) passando por todas as cavernas
keel_pts_x = x_positions
keel_pts_y = [-d_m for (_, _, d_m, _, _, _) in stations_1_25]
ax_pic.plot(keel_pts_x, keel_pts_y, color='#0F172A', lw=3.5, label="Linha de Quilha / Longarina Mestra")

# Cotas do Picadeiro
ax_pic.annotate('', xy=(0, -0.90), xytext=(7.80, -0.90), arrowprops=dict(arrowstyle='<->', color='black', lw=1.2))
ax_pic.text(3.90, -1.05, "Comprimento entre Balizas = 7,80 m (31,2 cm em 1:25) | Espaçamento entre Cavernas = 0,975 m (3,90 cm em 1:25)", ha='center', va='top', fontsize=7.5, fontweight='bold')

ax_pic.set_xlim(-0.8, 8.8)
ax_pic.set_ylim(-1.2, 2.3)
ax_pic.set_aspect('equal')
ax_pic.axis('off')
ax_pic.legend(loc='lower right', fontsize=7)

plt.suptitle("GABARITOS DAS CAVERNAS E PLANO DE PICADEIRO NA ESCALA 1:25 (1 metro real = 4,0 centímetros)\nCASCO 8,50 m × 2,70 m — Gabaritos Técnicos e Montagem Invertida (Strongback)", fontsize=11, fontweight='bold', color=c_hull, y=0.99)
plt.tight_layout()

output_1_25 = "/home/magdalena/eee/alunos/alberico-de-carvalho-santiago/gabarito_cavernas_e_picadeiro_1_25.png"
plt.savefig(output_1_25, dpi=300, bbox_inches='tight')
plt.close()
print("Gabarito e Picadeiro 1:25 gerados com sucesso!")
