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_hull = '#FACC15'       # Amarelo brilhante (como no Pop 25)
c_stripe = '#1E293B'     # Faixa antracite / cinza escuro
c_bottom = '#F8FAFC'     # Fundo branco
c_boot = '#DC2626'       # Linha d'água vermelha fina
c_glass = '#0284C7'      # Janela azul brilhante
c_dark = '#0F172A'       # Linhas e mastreação
c_wood = '#B45309'       # Madeira (Cana do leme)
c_keel = '#334155'       # Quilha de aço / chumbo
c_dim = '#B91C1C'        # Cotas vermelhas

# =========================================================================
# 1. PERFIL LATERAL IDÊNTICO AO POP 25 (B&G YACHT DESIGN / CABINHO)
# =========================================================================
ax1.set_title("1. PERFIL LATERAL TÉCNICO (ELEVATION VIEW) — VELEIRO POP 25 (B&G YACHT DESIGN)\nLOA: 7,54 m (24' 8\") | Boca: 2,80 m | Calado: 1,10 m | Armação Sloop Fracionada sem Estai de Popa | Leme de Popa", fontsize=10.5, fontweight='bold', color='#0F172A', pad=10)

# Linhas do Casco Pop 25 (LOA = 7,54 m | LWL = 7,25 m)
# Popa em x = 0 (y = 0.90 m), Proa em x = 7.54 m (y = 1.35 m)
xs = np.linspace(0, 7.54, 120)
# Sheerline moderno ligeiramente invertido (reverse sheer sutil)
sheer = 0.90 + 0.45 * (xs / 7.54)**1.6

# Fundo do casco (Carena rasa com quina viva)
# Popa x=0 (fundo y=-0.15m), meia-nau x=3.8m (y=-0.35m), roda de proa x=7.54m (sobe até y=+1.35m)
keel_line_x = [0, 0, 1.5, 3.8, 5.8, 7.25, 7.54]
keel_line_y = [0.90, -0.15, -0.28, -0.35, -0.30, 0.00, 1.35]

# Costado Amarelo Brilhante (Obra Morta)
poly_hull_x = np.concatenate([xs, [7.54, 7.25, 5.8, 3.8, 1.5, 0, 0]])
poly_hull_y = np.concatenate([sheer, [1.35, 0.00, -0.30, -0.35, -0.28, -0.15, 0.90]])
ax1.fill(poly_hull_x, poly_hull_y, color=c_hull, edgecolor=c_dark, lw=2.0, label="Costado Amarelo (Pop 25)")

# Faixa Cinza Escura / Antracite com degrau de subida a meia-nau
stripe_x = np.linspace(0, 7.35, 100)
# Faixa começa baixa na popa e sobe em degrau na meia-nau (x = 3.6 a 4.2m)
stripe_y_base = np.where(stripe_x < 3.6, 0.35, np.where(stripe_x < 4.2, 0.35 + 0.35 * ((stripe_x - 3.6)/0.6), 0.70 + 0.15 * ((stripe_x - 4.2)/3.15)))
ax1.fill_between(stripe_x, stripe_y_base, stripe_y_base + 0.18, color=c_stripe, edgecolor='none')

# Texto POP 25 na proa (como na imagem original)
ax1.text(5.60, 0.50, "POP 25", fontsize=11, fontweight='heavy', color=c_stripe, style='italic')

# Obra Viva / Fundo Branco (Abaixo da WL = 0)
x_bottom = [0, 0, 1.5, 3.8, 5.8, 7.25, 0]
y_bottom = [0, -0.15, -0.28, -0.35, -0.30, 0, 0]
ax1.fill(x_bottom, y_bottom, color=c_bottom, edgecolor='black', lw=1.0, label="Obra Viva / Fundo Branco")
ax1.axhline(0, color=c_boot, lw=1.8, linestyle='-', label="Linha d'Água (WL = 0,00 m)")

# Casaria de Perfil Baixo Integrado (Low profile coachroof)
# x = 2.40 a 5.80 m
cab_x = [2.40, 2.40, 3.80, 5.80, 5.80]
cab_y = [0.98, 1.25, 1.28, 1.20, 1.12]
ax1.fill(cab_x, cab_y, color=c_hull, edgecolor=c_dark, lw=1.5)

# Janela Lateral Azul Brilhante da Casaria
win_x = [3.20, 5.40, 5.20, 3.20]
win_y = [1.05, 1.12, 1.22, 1.20]
ax1.fill(win_x, win_y, color=c_glass, edgecolor=c_dark, lw=1.2, label="Janela Lateral Panorâmica")

# Púlpito de Proa e Guarda-mancebo em Inox
ax1.plot([6.80, 7.54, 7.54, 6.80], [1.32, 1.35, 1.95, 1.95], color='#94A3B8', lw=2.0)
ax1.plot([0.20, 0.20, 1.20], [0.90, 1.55, 1.55], color='#94A3B8', lw=2.0) # Púlpito de popa
for stx in [2.20, 3.80, 5.30]:
    ax1.plot([stx, stx], [np.interp(stx, xs, sheer), np.interp(stx, xs, sheer) + 0.60], color='#94A3B8', lw=1.5)
ax1.plot([0.20, 7.54], [1.55, 1.95], color='#94A3B8', lw=1.0) # Cabo de aço do guarda-mancebo

# Quilha Fin Keel (Calado = 1,10 m)
# x = 3.30 a 4.20 m
keel_pts = [[3.40, -0.35], [3.55, -1.10], [4.15, -1.10], [4.10, -0.35]]
ax1.fill([3.40, 3.55, 4.15, 4.10], [-0.35, -1.10, -1.10, -0.35], color=c_keel, edgecolor='black', lw=1.5, label="Quilha Fin Keel (Bulbo/Lastro 560 kg)")
# Bulbo de chumbo na base
ax1.add_patch(patches.Ellipse((3.85, -1.10), 0.90, 0.16, facecolor='#1E293B', edgecolor='black', lw=1.0))

# Leme de Popa Externo Pendurado (Transom-hung rudder)
rudder_pts = [[-0.05, 0.85], [-0.05, -0.85], [-0.35, -0.85], [-0.25, 0.85]]
ax1.fill(rudder_pts, color='#FFFFFF', edgecolor=c_dark, lw=1.5)
ax1.plot([-0.05, -0.05], [0.85, -0.85], color=c_dark, lw=3.0, label="Ferragens do Leme no Espelho")
# Cana do Leme
ax1.plot([-0.20, 0.80], [0.92, 0.98], color=c_wood, lw=3.5)

# Mastro Fracionado sem Estai de Popa (Backstayless)
mast_x = 3.90
ax1.plot([mast_x, mast_x - 0.25], [1.28, 8.80], color=c_dark, lw=5.5, label="Mastro de Alumínio Fracionado")
# Retranca
ax1.plot([mast_x - 0.05, 0.60], [1.60, 1.45], color=c_dark, lw=4.0)
# Burro de retranca (Boom vang telescópico)
ax1.plot([mast_x + 0.05, 2.50], [1.32, 1.50], color='#475569', lw=2.5)
# Estai de Proa (Forestay)
ax1.plot([mast_x - 0.20, 7.50], [8.00, 1.40], color='#64748B', lw=1.5)

# Cotas
ax1.annotate('', xy=(0, -1.35), xytext=(7.54, -1.35), arrowprops=dict(arrowstyle='<->', color=c_dim, lw=1.5))
ax1.text(3.77, -1.52, "Comprimento Total (LOA) = 7,54 m (24' 8\") | LWL = 7,25 m", ha='center', va='top', fontsize=8.0, fontweight='bold', color=c_dim)

ax1.annotate('', xy=(3.85, 0), xytext=(3.85, -1.10), arrowprops=dict(arrowstyle='<->', color='#0284C7', lw=1.2))
ax1.text(4.45, -0.55, "Calado T = 1,10 m", ha='left', va='center', fontsize=7.5, fontweight='bold', color='#0284C7')

ax1.set_xlim(-0.8, 8.5)
ax1.set_ylim(-1.8, 9.2)
ax1.set_aspect('equal')
ax1.axis('off')
ax1.legend(loc='upper right', fontsize=7.2)

# =========================================================================
# 2. PLANTA DE CONVÉS E ARRANJO GERAL (TOP VIEW DO POP 25)
# =========================================================================
ax2 = plt.subplot2grid((2, 1), (1, 0))
ax2.set_title("2. PLANTA SUPERIOR E ARRANJO INTERNO (TOP VIEW) — POP 25\nBoca Máxima: 2,80 m | Cockpit em T com Duplo Leme | Camarote de Proa, WC Transversal, Cozinha e 2 Quarter Berths", fontsize=10.5, fontweight='bold', color='#0F172A', pad=10)

# Contorno do Casco em Planta (Boca = 2,80 m / semi-boca = 1,40 m)
# Formato quase triangular característico dos projetos modernos de Cabinho (popa bem larga de 2,40 m)
w_half_pop = np.where(xs < 4.0, 1.20 + 0.20 * (xs/4.0)**1.2, 1.40 * np.sqrt(np.maximum(0, 1 - ((xs - 4.0)/3.54)**2)))
ax2.plot(xs, w_half_pop, color=c_dark, lw=2.2)
ax2.plot(xs, -w_half_pop, color=c_dark, lw=2.2)
ax2.plot([0, 0], [-1.20, 1.20], color=c_dark, lw=2.2)
ax2.fill_between(xs, -w_half_pop, w_half_pop, color='#F8FAFC')
ax2.axhline(0, color='#94A3B8', lw=1.0, linestyle=':')

# 2.1. Camarote de Proa em V (x = 5.40 a 7.30 m)
ax2.plot([5.40, 5.40], [-w_half_pop[int(5.40/7.54*120)], w_half_pop[int(5.40/7.54*120)]], color=c_dark, lw=2.5)
ax2.fill([5.40, 5.40, 7.20, 7.20], [0.08, 1.10, 0.20, 0.08], color='#86EFAC', edgecolor='black', lw=1.0)
ax2.fill([5.40, 5.40, 7.20, 7.20], [-0.08, -1.10, -0.20, -0.08], color='#86EFAC', edgecolor='black', lw=1.0)
ax2.text(6.30, 0, "CAMAROTE DE PROA\n(Cama de Casal em V)", ha='center', va='center', fontsize=7.0, fontweight='bold', color='#14532D')

# 2.2. Banheiro Transversal (Heads) — x = 4.40 a 5.40 m
ax2.plot([4.40, 4.40], [-w_half_pop[int(4.40/7.54*120)], w_half_pop[int(4.40/7.54*120)]], color=c_dark, lw=2.5)
ax2.fill([4.40, 4.40, 5.40, 5.40], [0.45, 1.35, 1.25, 0.45], color='#F472B6', alpha=0.6)
ax2.add_patch(patches.Ellipse((4.90, 0.95), 0.38, 0.28, facecolor='white', edgecolor='black', lw=1.0))
ax2.text(4.90, 1.20, "WC Marítimo", ha='center', fontsize=6.2, fontweight='bold', color='#831843')
ax2.fill([4.40, 4.40, 5.40, 5.40], [-0.45, -1.35, -1.25, -0.45], color='#FBCFE8', alpha=0.6)
ax2.text(4.90, -0.90, "Lavatório / Closet", ha='center', fontsize=6.2, fontweight='bold', color='#9D174D')

# 2.3. Cozinha (Galley) a Boreste e Mesa de Navegação a Bombordo — x = 3.40 a 4.40 m
# Cozinha Boreste
ax2.fill([3.40, 3.40, 4.40, 4.40], [0.65, 1.38, 1.35, 0.65], color='#CBD5E1', edgecolor='black', lw=1.0)
ax2.text(3.90, 1.02, "Cozinha (Fogão + Pia)", ha='center', fontsize=6.5, fontweight='bold', color='#0F172A')
# Mesa de Navegação Bombordo
ax2.fill([3.40, 3.40, 4.40, 4.40], [-0.65, -1.38, -1.35, -0.65], color='#CBD5E1', edgecolor='black', lw=1.0)
ax2.text(3.90, -1.02, "Mesa de Cartas / Painel", ha='center', fontsize=6.5, fontweight='bold', color='#0F172A')

# Mastro no centro do salão
ax2.add_patch(patches.Circle((3.90, 0), 0.12, facecolor='#1E293B', edgecolor='black', lw=1.2, zorder=5))

# 2.4. Salão com Sofás e Dois Amplos Quarter Berths na Popa — x = 0 a 3.40 m
ax2.fill([1.80, 1.80, 3.40, 3.40], [0.60, 1.30, 1.30, 0.60], color='#FEF08A', edgecolor='black', lw=1.0)
ax2.fill([1.80, 1.80, 3.40, 3.40], [-0.60, -1.30, -1.30, -0.60], color='#FEF08A', edgecolor='black', lw=1.0)
ax2.text(2.60, 0.95, "Sofá / Quarter Berth BE", ha='center', fontsize=6.5, color='#713F12')
ax2.text(2.60, -0.95, "Sofá / Quarter Berth BB", ha='center', fontsize=6.5, color='#713F12')

# Camas de Popa (1,90 m x 1,08 m cada — cabem até casal!)
ax2.fill([0.20, 0.20, 1.80, 1.80], [0.45, 1.18, 1.25, 0.45], color='#93C5FD', edgecolor='black', lw=1.0)
ax2.fill([0.20, 0.20, 1.80, 1.80], [-0.45, -1.18, -1.25, -0.45], color='#93C5FD', edgecolor='black', lw=1.0)
ax2.text(1.00, 0.82, "Cama de Popa (BE)\n1,90 m × 1,08 m", ha='center', fontsize=6.2, fontweight='bold', color='#1E3A8A')
ax2.text(1.00, -0.82, "Cama de Popa (BB)\n1,90 m × 1,08 m", ha='center', fontsize=6.2, fontweight='bold', color='#1E3A8A')

# Cockpit central em T com motor auxiliar elétrico/diesel
ax2.fill([0.50, 2.20, 2.20, 0.50], [-0.40, -0.40, 0.40, 0.40], color='#E2E8F0', edgecolor='black', lw=1.2)
ax2.text(1.35, 0, "Cockpit / Motor Auxiliar", ha='center', va='center', fontsize=6.8, fontweight='bold', color='#475569')

# Cotas em Planta
ax2.annotate('', xy=(0, -1.75), xytext=(7.54, -1.75), arrowprops=dict(arrowstyle='<->', color=c_dim, lw=1.5))
ax2.text(3.77, -1.95, "LOA = 7,54 m | Boca Máxima = 2,80 m (Popa Larga = 2,40 m)", ha='center', va='top', fontsize=8.0, fontweight='bold', color=c_dim)

ax2.set_xlim(-0.8, 8.5)
ax2.set_ylim(-2.2, 2.2)
ax2.set_aspect('equal')
ax2.axis('off')

plt.tight_layout()
output_pop25 = "/home/magdalena/eee/alunos/alberico-de-carvalho-santiago/perfil_e_planta_pop25_completo.png"
plt.savefig(output_pop25, dpi=300, bbox_inches='tight')
plt.close()
print("Prancha similar Pop 25 gerada com sucesso!")
