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

# Configurar prancha técnica estilo Saveiro tradicional 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'      # Tom madeira/compensado
c_bg_wood = '#FEF3C7'   # Fundo madeira
c_cut = '#000000'       # Linha de corte preta sólida (como na prancha do aluno)
c_deadrise = '#2563EB'   # Tom azul deadrise

# Dados das 11 Estações para o Saveiro de 6,30 m na Escala 1:25 (comprimento total = 25,2 cm)
# (Nome, top_w_real_m, h_real_m, flat_w_real_m, deadrise_deg)
stations_saveiro_630 = [
    ("STA 0 (Proa / Bow)", 0.84, 0.42, 0.56, 35),
    ("STA 1", 1.26, 0.525, 0.84, 28),
    ("STA 2", 1.68, 0.63, 1.12, 22),
    ("STA 3", 2.10, 0.70, 1.40, 18),
    ("STA 4", 2.52, 0.77, 1.68, 15),
    ("STA 5 (Meia-Nau / Midship)", 2.94, 0.84, 1.96, 12),
    ("STA 6 (Meia-Nau Ré)", 2.94, 0.84, 1.96, 12),
    ("STA 7", 2.80, 0.805, 1.89, 13),
    ("STA 8", 2.52, 0.77, 1.68, 15),
    ("STA 9", 1.96, 0.665, 1.26, 18),
    ("STA 10 (Espelho de Popa / Stern)", 1.40, 0.56, 0.91, 22)
]

# Grid 4x3 para as 11 balizas + bloco de notas
for idx, (title, top_w, h, flat_w, deadrise) in enumerate(stations_saveiro_630):
    ax = plt.subplot2grid((4, 3), (idx // 3, idx % 3))
    
    # Escala 1:25 (1 m real = 4,0 cm no papel)
    top_w_cm = top_w * 4.0
    h_cm = h * 4.0
    flat_w_cm = flat_w * 4.0
    
    # Coordenadas do formato tradicional do Saveiro (Fundo chato com costado em V alargado)
    # Vértices em cm (escala 1:25):
    # Topo-Esq, Fundo-Esq, Fundo-Dir, Topo-Dir
    x_poly = [-top_w_cm/2, -flat_w_cm/2, flat_w_cm/2, top_w_cm/2, -top_w_cm/2]
    y_poly = [h_cm, 0, 0, h_cm, h_cm]
    
    ax.fill(x_poly, y_poly, color='#FFFFFF', edgecolor=c_cut, lw=2.0)
    
    # Linha de Centro (CL) tracejada
    ax.axvline(0, color='black', lw=0.8, linestyle=':')
    
    # Textos de medidas na caverna
    ax.text(0, h_cm + 0.25, f"Boca: {top_w_cm:.2f} cm ({top_w:.2f} m)", ha='center', va='bottom', fontsize=7.2, fontweight='bold', color=c_hull)
    ax.text(0, 0.15, f"Fundo: {flat_w_cm:.2f} cm ({flat_w:.2f} m)", ha='center', va='bottom', fontsize=6.5, fontweight='bold', color='#B45309')
    ax.text(top_w_cm/2 + 0.25, h_cm/2, f"H = {h_cm:.2f} cm\n({h*100:.1f} cm real)", ha='left', va='center', fontsize=6.0, color='#475569')
    ax.text(0, h_cm/2, f"{deadrise}°", ha='center', va='center', fontsize=8.0, fontweight='bold', color=c_deadrise)

    ax.set_title(title, fontsize=8.0, fontweight='bold', color=c_hull, pad=3)
    ax.set_xlim(-7.5, 7.5)
    ax.set_ylim(-0.5, 5.0)
    ax.set_aspect('equal')
    ax.axis('off')

# Bloco 12: Régua de escala e Notas Técnicas
ax_notes = plt.subplot2grid((4, 3), (3, 2))
ax_notes.set_title("RÉGUA DE ESCALA 1:25 & NOTAS", fontsize=8.0, fontweight='bold', color=c_hull, pad=3)

# Régua graduada de 0 a 10 cm (representando 2,5 m reais)
for r in range(11):
    ax_notes.plot([r - 5, r - 5], [0.8, 1.2 if r % 5 == 0 else 1.0], color='black', lw=1.2)
ax_notes.plot([-5, 5], [0.8, 0.8], color='black', lw=1.5)
ax_notes.text(-5, 0.4, "0 cm", ha='center', fontsize=6)
ax_notes.text(0, 0.4, "5 cm (1,25 m real)", ha='center', fontsize=6)
ax_notes.text(5, 0.4, "10 cm (2,50 m real)", ha='center', fontsize=6)

notes_text = """
• ESCALA 1:25 (1 m real = 4,0 cm / 40 mm)
• Comprimento Total do Modelo: 25,2 cm (6,30 m real)
• Espaçamento entre Balizas: 2,52 cm (63 cm real)
• Cortar sobre a linha preta sólida externa.
• Alinhar as bases retas no picadeiro plano.
"""
ax_notes.text(-6.5, 2.2, notes_text, fontsize=6.2, family='monospace', color='#1E293B', va='top')
ax_notes.set_xlim(-7.5, 7.5)
ax_notes.set_ylim(-0.5, 4.5)
ax_notes.set_aspect('equal')
ax_notes.axis('off')

plt.suptitle("SAVEIRO 6.30M FISHING BOAT — BULKHEAD CUTTING TEMPLATES (ESCALA 1:25)\n11 Cavernas de Corte (STA 0 a STA 10) | Modelo Reduzido: 25,2 cm | Espaçamento: 2,52 cm", fontsize=11, fontweight='bold', color=c_hull, y=0.99)
plt.tight_layout()

output_saveiro_1_25 = "/home/magdalena/eee/alunos/alberico-de-carvalho-santiago/gabaritos_saveiro_6_30m_escala_1_25.png"
plt.savefig(output_saveiro_1_25, dpi=300, bbox_inches='tight')
plt.close()
print("Gabaritos do Saveiro 6.30m em 1:25 gerados com sucesso!")
