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

# Configurar prancha técnica do Plano Vélico
plt.style.use('seaborn-v0_8-whitegrid' if 'seaborn-v0_8-whitegrid' in plt.style.available else 'default')
fig = plt.figure(figsize=(16, 11), dpi=300)

c_hull = '#1E3A8A'       # Azul Marinho
c_bottom = '#B91C1C'     # Vermelho Óxido
c_wood = '#B45309'       # Mastro e Pena (Madeira)
c_sail = '#FEF3C7'       # Lona da Vela (Bege claro tradicional)
c_rig = '#1E293B'        # Cabos / Brandais
c_dim = '#DC2626'        # Cotas vermelhas
c_wl = '#0284C7'         # Linha d'Água

ax = fig.add_subplot(1, 1, 1)
ax.set_title("PLANO VÉLICO TRADICIONAL — SAVEIRO DE UMA VELA DE PENA (6,30 m)\nArmação Latina Baiana | Proporções em Escala Real (Metros) e Escala 1:25 (Centímetros)", fontsize=11, fontweight='bold', color='#0F172A', pad=12)

# 1. CASCO DO SAVEIRO DE 6,30 m (Perfil)
# Popa em x = 0, Proa em x = 6.30 m
xs = np.linspace(0, 6.30, 80)
# Curva da borda
sheer = 0.65 + 0.35 * (xs / 6.30)**2.2
# Fundo
keel_x = [0, 0, 3.0, 5.5, 6.30]
keel_y = [0.65, -0.40, -0.45, -0.20, 1.00]

# Preenchimento Casco
ax.fill(np.concatenate([xs, [6.30, 5.5, 3.0, 0, 0]]),
        np.concatenate([sheer, [1.00, -0.20, -0.45, -0.40, 0.65]]),
        color=c_hull, edgecolor='black', lw=1.8, label="Casco Saveiro 6,30 m")

# Fundo Vivo (Abaixo da WL = 0)
ax.fill([0, 0, 3.0, 5.5, 5.9, 0], [0, -0.40, -0.45, -0.20, 0, 0], color=c_bottom, alpha=0.9)
ax.axhline(0, color=c_wl, lw=1.5, linestyle='--', label="Linha d'Água (WL = 0,00 m)")

# 2. MASTRO CURTO E ROBUSTO (Fixado a 2,20 m da proa = x = 4,10 m)
# Mastro com leve caimento para a ré (rake)
mast_base_x = 4.10
mast_base_y = -0.40 # Encaixe na sobrequilha
mast_head_x = 3.90
mast_head_y = 3.80 # Altura de 3,80 m acima da WL
ax.plot([mast_base_x, mast_head_x], [mast_base_y, mast_head_y], color=c_wood, lw=6, label="Mastro Curto (H = 4,20 m total)")

# 3. A PENA / VERGA INCLINADA (Comprimento P = 7,80 m)
# Extremidade inferior (Amura na proa): x = 6.10 m, y = 0.85 m
# Extremidade superior (Penol no alto da ré): x = 0.40 m, y = 6.20 m
pen_x0, pen_y0 = 6.10, 0.85
pen_x1, pen_y1 = 0.40, 6.20
ax.plot([pen_x0, pen_x1], [pen_y0, pen_y1], color='#78350F', lw=4.5, label="Pena / Entena (P = 7,80 m)")

# 4. A VELA LATINA TRIANGULAR (Lona costurada)
# Vértice 1: Punho da Amura (6.10 m, 0.85 m)
# Vértice 2: Tope / Penol (0.40 m, 6.20 m)
# Vértice 3: Punho da Escota na Popa (0.20 m, 0.90 m)
sail_x = [pen_x0, pen_x1, 0.20, pen_x0]
sail_y = [pen_y0, pen_y1, 0.90, pen_y0]
ax.fill(sail_x, sail_y, color=c_sail, edgecolor='#D97706', lw=1.5, label="Vela de Pena (Área = 21,5 m²)")

# Costuras verticais tradicionais na vela (panos de lona)
for t in np.linspace(0.12, 0.88, 7):
    x_top = pen_x0 + t * (pen_x1 - pen_x0)
    y_top = pen_y0 + t * (pen_y1 - pen_y0)
    x_bot = pen_x0 + t * (0.20 - pen_x0)
    y_bot = pen_y0 + t * (0.90 - pen_y0)
    ax.plot([x_top, x_bot], [y_top, y_bot], color='#D97706', lw=0.6, linestyle=':')

# Flâmula baiana no tope da pena
ax.add_patch(patches.Polygon([[pen_x1, pen_y1], [pen_x1 - 0.6, pen_y1 + 0.15], [pen_x1 - 0.5, pen_y1 - 0.15]], closed=True, facecolor='#DC2626'))

# 5. CABOS DE MANOBRA (Adriça e Escota)
# Adriça segurando a pena ao tope do mastro
ax.plot([mast_head_x, 3.25], [mast_head_y, 3.55], color=c_rig, lw=1.8)
# Escota da vela na popa
ax.plot([0.20, 0.40], [0.90, 0.70], color=c_rig, lw=1.5)

# -------------------------------------------------------------------------
# COTAS TÉCNICAS DO PLANO VÉLICO (P e E)
# -------------------------------------------------------------------------
# Cota P (Testa ao longo da Pena): 7,80 m
ax.annotate('', xy=(pen_x0 + 0.15, pen_y0 + 0.15), xytext=(pen_x1 + 0.15, pen_y1 + 0.15),
            arrowprops=dict(arrowstyle='<->', color=c_dim, lw=1.8))
ax.text(3.4, 3.9, 'COTA P (Testa / Pena) = 7,80 m\n(31,2 cm em 1:25)', ha='left', va='bottom', fontsize=8.5, fontweight='bold', color=c_dim, rotation=43)

# Cota E (Esteira / Base da Vela): 5,90 m
ax.annotate('', xy=(0.20, 0.65), xytext=(pen_x0, 0.65),
            arrowprops=dict(arrowstyle='<->', color=c_dim, lw=1.8))
ax.text(3.15, 0.45, 'COTA E (Esteira / Base) = 5,90 m (23,6 cm em 1:25)', ha='center', va='top', fontsize=8.5, fontweight='bold', color=c_dim)

# Cota Comprimento do Casco (LOA): 6,30 m
ax.annotate('', xy=(0, -0.65), xytext=(6.30, -0.65),
            arrowprops=dict(arrowstyle='<->', color='black', lw=1.2))
ax.text(3.15, -0.80, 'Comprimento do Casco (LOA) = 6,30 m (25,2 cm em 1:25)', ha='center', va='top', fontsize=8.5, fontweight='bold')

# Bloco Técnico de Resumo
text_box = (
    "RESUMO TÉCNICO DO PLANO VÉLICO:\n"
    "• Cota P (Testa da Vela / Comprimento da Pena): 7,80 m\n"
    "• Cota E (Esteira / Base da Vela): 5,90 m\n"
    "• Altura do Mastro acima do Convés: 3,40 m (4,20 m total)\n"
    "• Posição do Mastro: a 2,20 m da roda de proa\n"
    "• Área Vélica Total: ~21,5 m² de lona\n"
    "• Na Escala 1:25 (Maquete):\n"
    "   - P = 31,2 cm | E = 23,6 cm | Mastro = 16,8 cm | Casco = 25,2 cm"
)
ax.text(0.3, 2.2, text_box, fontsize=7.8, family='monospace', color='#0F172A',
        bbox=dict(boxstyle='square,pad=0.6', facecolor='#FEF3C7', edgecolor='#D97706', lw=1.2))

ax.set_xlim(-0.8, 7.5)
ax.set_ylim(-1.1, 7.0)
ax.set_aspect('equal')
ax.axis('off')

plt.tight_layout()
output_veleiro = "/home/magdalena/eee/alunos/alberico-de-carvalho-santiago/plano_velico_saveiro_6_30m.png"
plt.savefig(output_veleiro, dpi=300, bbox_inches='tight')
plt.close()
print("Plano vélico gerado com sucesso!")
