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

# Configurar prancha técnica estilo CAD Naval
plt.style.use('seaborn-v0_8-whitegrid' if 'seaborn-v0_8-whitegrid' in plt.style.available else 'default')
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(18, 14), dpi=300)

c_wood = '#B45309'
c_dark = '#0F172A'
c_dim = '#B91C1C'
c_wl = '#0284C7'

# =========================================================================
# 1. PERFIL: MULTICHINE 28 (B&G YACHT DESIGN / CABINHO) — 9,20 m
# =========================================================================
ax1.set_title("1. PERFIL LATERAL TÉCNICO (ELEVATION VIEW) — MULTICHINE 28 (B&G YACHT DESIGN)\nLOA: 9,20 m (30' 2\") | LWL: 7,82 m | Boca: 3,18 m | Calado: 1,52 m | Quilha de Bulbo c/ Skeg e Leme Externo de Popa", fontsize=10.5, fontweight='bold', color='#0F172A', pad=10)

xs1 = np.linspace(0, 9.20, 120)
# Sheerline clássico oceânico com proa lançada (+1,45 m) e popa em +0,95 m
sheer1 = 0.95 + 0.50 * (xs1 / 9.20)**2.0

# Linha de fundo (Multichine / quinas vivas)
# Popa x=0 (y=-0.20m), meia-nau x=4.5m (y=-0.45m), roda de proa x=9.20m (y=+1.45m)
keel_x1 = [0, 0, 1.8, 4.5, 6.8, 8.8, 9.20]
keel_y1 = [0.95, -0.20, -0.35, -0.45, -0.38, 0.00, 1.45]

# Costado Branco Naval (Obra Morta)
poly1_x = np.concatenate([xs1, [9.20, 8.8, 6.8, 4.5, 1.8, 0, 0]])
poly1_y = np.concatenate([sheer1, [1.45, 0.00, -0.38, -0.45, -0.35, -0.20, 0.95]])
ax1.fill(poly1_x, poly1_y, color='#F8FAFC', edgecolor=c_dark, lw=2.0, label="Costado Branco (Multichine 28)")

# Faixa decorativa azul-marinho na borda
ax1.plot(xs1, sheer1 - 0.10, color='#1E3A8A', lw=4, label="Faixa Azul Clássica MC 28")

# Fundo / Obra Viva (Vermelho Vivo abaixo da WL = 0)
x_bot1 = [0, 0, 1.8, 4.5, 6.8, 8.8, 0]
y_bot1 = [0, -0.20, -0.35, -0.45, -0.38, 0, 0]
ax1.fill(x_bot1, y_bot1, color='#B91C1C', edgecolor='black', lw=1.2, label="Obra Viva / Fundo")
ax1.axhline(0, color='#0284C7', lw=1.8, linestyle='--', label="Linha d'Água (WL = 0,00 m)")

# Casaria Oceânica em Degrau (Coachroof)
# x = 2.80 a 6.80 m
cab1_x = [2.80, 2.80, 4.80, 6.80, 6.80]
cab1_y = [1.02, 1.38, 1.35, 1.25, 1.15]
ax1.fill(cab1_x, cab1_y, color='#F8FAFC', edgecolor=c_dark, lw=1.5)
# Vigias Ovais clássicas da casaria
for vx in [3.40, 4.30, 5.20, 6.10]:
    ax1.add_patch(patches.Rectangle((vx, 1.15), 0.50, 0.16, facecolor='#38BDF8', edgecolor='black', lw=1.0))

# Quilha Fin Keel com Bulbo de Chumbo (1.200 kg | Calado = 1,52 m)
# x = 4.0 a 5.10 m
keel_pts1 = [[4.10, -0.45], [4.25, -1.52], [5.05, -1.52], [4.95, -0.45]]
ax1.fill([4.10, 4.25, 5.05, 4.95], [-0.45, -1.52, -1.52, -0.45], color='#334155', edgecolor='black', lw=1.5, label="Quilha de Chumbo (1.200 kg)")
ax1.add_patch(patches.Ellipse((4.65, -1.52), 1.10, 0.20, facecolor='#0F172A', edgecolor='black', lw=1.0))

# Leme Externo de Popa no Espelho com Plataforma de Embarque (Marca do MC 28)
rudder_pts1 = [[-0.05, 0.90], [-0.05, -1.25], [-0.45, -1.25], [-0.35, 0.90]]
ax1.fill(rudder_pts1, color='#FFFFFF', edgecolor=c_dark, lw=1.5)
ax1.plot([-0.05, -0.05], [0.90, -1.25], color=c_dark, lw=3.5, label="Leme Externo c/ Plataforma")
# Plataforma de popa com escadinha
ax1.plot([-0.50, 0.0], [0.55, 0.55], color='#B45309', lw=3.0)
# Cana do Leme
ax1.plot([-0.30, 0.95], [0.98, 1.05], color='#B45309', lw=3.5)

# Púlpito de proa e guarda-mancebo inox
ax1.plot([8.20, 9.20, 9.20, 8.20], [1.40, 1.45, 2.15, 2.15], color='#94A3B8', lw=2.0)
ax1.plot([0.30, 0.30, 1.50], [0.95, 1.65, 1.65], color='#94A3B8', lw=2.0) # Púlpito de popa
for stx in [2.60, 4.60, 6.60]:
    ax1.plot([stx, stx], [np.interp(stx, xs1, sheer1), np.interp(stx, xs1, sheer1) + 0.65], color='#94A3B8', lw=1.5)
ax1.plot([0.30, 9.20], [1.65, 2.15], color='#94A3B8', lw=1.0)

# Mastro Masthead Sloop (H = 11,2 m acima convés)
mast_x1 = 4.80
ax1.plot([mast_x1, mast_x1 - 0.35], [1.35, 11.20], color=c_dark, lw=6.0, label="Mastro de Alumínio no Convés")
# Retranca
ax1.plot([mast_x1 - 0.05, 0.90], [1.75, 1.55], color=c_dark, lw=4.0)
# Estai de Proa (Forestay) e Estai de Popa (Backstay)
ax1.plot([mast_x1 - 0.35, 9.15], [11.00, 1.50], color='#64748B', lw=1.5)
ax1.plot([mast_x1 - 0.35, 0.10], [11.00, 1.00], color='#64748B', lw=1.5)

# Cotas
ax1.annotate('', xy=(0, -1.80), xytext=(9.20, -1.80), arrowprops=dict(arrowstyle='<->', color=c_dim, lw=1.5))
ax1.text(4.60, -2.00, "Comprimento Total (LOA) = 9,20 m (30' 2\") | LWL = 7,82 m", ha='center', va='top', fontsize=8.0, fontweight='bold', color=c_dim)

ax1.annotate('', xy=(4.65, 0), xytext=(4.65, -1.52), arrowprops=dict(arrowstyle='<->', color='#0284C7', lw=1.2))
ax1.text(5.35, -0.75, "Calado T = 1,52 m", ha='left', va='center', fontsize=7.5, fontweight='bold', color='#0284C7')

ax1.set_xlim(-1.0, 10.5)
ax1.set_ylim(-2.3, 11.8)
ax1.set_aspect('equal')
ax1.axis('off')
ax1.legend(loc='upper right', fontsize=7.2)

# =========================================================================
# 2. COMPARAÇÃO DE PERFIL: POP 25 (7,54 m) vs. MULTICHINE 28 (9,20 m)
# =========================================================================
ax2.set_title("2. COMPARAÇÃO DIRETA DE SILHUETAS DE PERFIL: POP 25 (25 ft) vs. MULTICHINE 28 (30 ft)\nEvolução da Linha de Cruzeiro: Diferenças de Proa, Apêndices, Popa e Altura de Mastro", fontsize=10.5, fontweight='bold', color='#0F172A', pad=10)

# Desenho em silhueta sobreposta / lado a lado
# 1. Pop 25 (Casco Amarelo — 7,54 m)
xs_p = np.linspace(0, 7.54, 80)
sheer_p = 0.90 + 0.45 * (xs_p / 7.54)**1.6
ax2.plot(xs_p, sheer_p, color='#CA8A04', lw=2.5, label="Pop 25 (LOA = 7,54 m | Calado = 1,10 m | Sloop Fracionado s/ Estai Popa)")
ax2.fill_between(xs_p, 0, sheer_p, color='#FEF08A', alpha=0.5)
# Quilha Pop 25
ax2.fill([3.40, 3.55, 4.15, 4.10], [-0.35, -1.10, -1.10, -0.35], color='#CA8A04', alpha=0.8)
# Leme Pop 25
ax2.plot([-0.05, -0.05], [0.85, -0.85], color='#CA8A04', lw=2.5)
# Mastro Pop 25
ax2.plot([3.90, 3.65], [1.28, 8.80], color='#CA8A04', lw=3.0, linestyle='--')
ax2.text(3.70, 9.00, "Tope Pop 25 (8,8 m)", fontsize=7, fontweight='bold', color='#CA8A04', ha='center')

# 2. Multichine 28 (Casco Azul/Branco — 9,20 m)
ax2.plot(xs1, sheer1, color='#1E3A8A', lw=2.5, label="Multichine 28 (LOA = 9,20 m | Calado = 1,52 m | Masthead Sloop c/ Estai Popa)")
ax2.fill_between(xs1, 0, sheer1, color='#93C5FD', alpha=0.3)
# Quilha MC 28
ax2.fill([4.10, 4.25, 5.05, 4.95], [-0.45, -1.52, -1.52, -0.45], color='#1E3A8A', alpha=0.8)
# Leme MC 28
ax2.plot([-0.05, -0.05], [0.90, -1.25], color='#1E3A8A', lw=2.5)
# Mastro MC 28
ax2.plot([mast_x1, mast_x1 - 0.35], [1.35, 11.20], color='#1E3A8A', lw=3.5)
ax2.text(mast_x1 - 0.35, 11.45, "Tope MC 28 (11,2 m)", fontsize=7.5, fontweight='bold', color='#1E3A8A', ha='center')

# Linha d'Água
ax2.axhline(0, color='#0284C7', lw=1.5, linestyle=':', label="Linha d'Água Comum (WL = 0)")

# Quadro Comparativo de Texto
comp_box = (
    "COMPARATIVO DE PERFIL (CABINHO DESIGN):\n"
    "• POP 25 (7,54 m):\n"
    "   - Linhas ultra-modernas (proa vertical, casaria integrada semi-flush deck).\n"
    "   - Armação fracionada sem estai de popa (backstayless).\n"
    "   - Calado de 1,10 m (acesso a praias rasas e fundeios de baía).\n"
    "• MULTICHINE 28 (9,20 m):\n"
    "   - Veleiro oceânico clássico de circunavegação (dezenas deram a volta ao mundo).\n"
    "   - Proa lançada marinheira com casaria em degrau e plataforma de popa.\n"
    "   - Calado de 1,52 m com quilha profunda e mastro de tope com estai de popa."
)
ax2.text(0.1, -1.6, comp_box, fontsize=7.2, family='monospace', color='#0F172A',
        bbox=dict(boxstyle='square,pad=0.5', facecolor='#FEF3C7', edgecolor='#D97706', lw=1.0))

ax2.set_xlim(-1.0, 10.5)
ax2.set_ylim(-2.2, 12.0)
ax2.set_aspect('equal')
ax2.axis('off')
ax2.legend(loc='upper right', fontsize=7.2)

plt.tight_layout()
output_mc28 = "/home/magdalena/eee/alunos/alberico-de-carvalho-santiago/perfil_multichine28_vs_pop25.png"
plt.savefig(output_mc28, dpi=300, bbox_inches='tight')
plt.close()
print("Prancha Multichine 28 gerada com sucesso!")
