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

# Estilo técnico naval
plt.style.use('seaborn-v0_8-whitegrid' if 'seaborn-v0_8-whitegrid' in plt.style.available else 'default')
fig = plt.figure(figsize=(16, 12), dpi=300)

# Paleta de cores naval profissional
c_dark = '#0F172A'       # Slate Dark
c_hull = '#1E3A8A'       # Azul Naval Clássico (Costado)
c_bottom = '#B91C1C'     # Vermelho Óxido / Anti-incrustante (Fundo vivo)
c_boot = '#FFFFFF'       # Linha d'água branca
c_wood = '#D97706'       # Frisos de madeira / Teca
c_house = '#F8FAFC'      # Cabine / Casaria branca
c_glass = '#38BDF8'      # Vidros
c_wl = '#0284C7'         # Linha d'água de referência
c_text = '#1E293B'

# -------------------------------------------------------------------------
# 1. PERFIL LONGITUDINAL DO CASCO (LOBSTER BOAT STYLE - 8,50 m)
# -------------------------------------------------------------------------
ax1 = fig.add_subplot(2, 1, 1)
ax1.set_title("1. PLANO DE PERFIL LONGITUDINAL (Costado, Proa Lançada, Casaria Lobster e Fundo)\nPOWERCAT LOBSTER 8,50 m × 3,60 m — Embarcação Pesqueira Costeira / Talude", fontsize=11, fontweight='bold', color=c_dark, pad=10)

# Linha do Costado (Sheerline clássica de Lobster: proa alta lançada caindo suavemente para a popa)
x_s = np.linspace(0, 8.5, 100)
# Proa em x=8.5m com altura y=+1.20m, Popa em x=0m com altura y=+0.75m
sheer_y = 0.75 + 0.45 * (x_s / 8.5)**2.2

# Linha do Fundo / Quilha
# Popa x=0 (fundo a -0.55m), Meia-nau x=4.0 (-0.55m), Roda de proa subindo suavemente até +1.20m em x=8.5m
x_k = np.array([0, 0, 4.5, 7.2, 8.3, 8.5])
y_k = np.array([0.75, -0.55, -0.55, -0.35, 0.5, 1.20])

# Preenchimento do Casco Morto (Costado Azul Naval acima da WL)
# Polígono do costado
poly_hull_x = np.concatenate([x_s, [8.5, 8.3, 7.2, 4.5, 0, 0]])
poly_hull_y = np.concatenate([sheer_y, [1.20, 0.5, -0.35, -0.55, -0.55, 0.75]])
ax1.fill(poly_hull_x, poly_hull_y, color=c_hull, edgecolor=c_dark, lw=2, label="Costado Azul Naval (PRFV)")

# Preenchimento da Obra Viva (Fundo Vermelho Anti-incrustante abaixo da WL = 0)
x_bottom_pts = [0, 0, 4.5, 7.2, 7.9, 0]
y_bottom_pts = [0, -0.55, -0.55, -0.35, 0, 0]
ax1.fill(x_bottom_pts, y_bottom_pts, color=c_bottom, edgecolor='black', lw=1.2, label="Obra Viva / Fundo (-0,55 m)")

# Linha de Flotação / Boot-stripe branca
ax1.axhline(0, color=c_wl, lw=1.8, linestyle='--', label="Linha d'Água de Projeto (LWL = 8,10 m)")
ax1.plot([0, 7.9], [0, 0], color='white', lw=3)

# Cabine Típica Downeast / Lobster (Cuddy Cabin de proa com para-brisa inclinado e hardtop estendido)
cab_x = [3.0, 6.2, 5.7, 2.5, 2.5, 3.0]
cab_y = [0.82, 0.98, 1.95, 1.95, 0.80, 0.80]
ax1.fill(cab_x, cab_y, color=c_house, edgecolor=c_dark, lw=1.8)

# Janelas do Para-brisa Lobster (3 janelas verticais/levemente inclinadas)
ax1.add_patch(patches.Polygon([[5.6, 1.1], [5.9, 1.1], [5.5, 1.8], [5.2, 1.8]], closed=True, facecolor=c_glass, edgecolor=c_dark, lw=1.2))
ax1.add_patch(patches.Polygon([[4.3, 1.1], [5.0, 1.1], [4.7, 1.8], [4.0, 1.8]], closed=True, facecolor=c_glass, edgecolor=c_dark, lw=1.2))
ax1.add_patch(patches.Polygon([[3.0, 1.1], [3.8, 1.1], [3.6, 1.8], [2.8, 1.8]], closed=True, facecolor=c_glass, edgecolor=c_dark, lw=1.2))

# Vigias ovais na cabine de descanso de vante
ax1.add_patch(patches.Ellipse((6.8, 0.75), 0.35, 0.18, facecolor=c_glass, edgecolor='white', lw=1.5))
ax1.add_patch(patches.Ellipse((7.5, 0.88), 0.35, 0.18, facecolor=c_glass, edgecolor='white', lw=1.5))

# Teto Hardtop prolongado com mastro de luzes/antenas
ax1.plot([2.2, 5.9], [1.98, 1.98], color=c_dark, lw=4) # Teto
ax1.plot([4.2, 4.2], [1.98, 2.60], color=c_dark, lw=2.5) # Mastro
ax1.plot([3.8, 4.6], [2.40, 2.40], color=c_dark, lw=2)
ax1.text(4.2, 2.70, 'Luz de Topo / Radar', ha='center', fontsize=7, fontweight='bold', color=c_dark)

# Borda falsa / Guarda-corpo na praça de ré (Popa baixa e ergonômica para pesca)
ax1.plot([0, 2.5], [0.75, 0.80], color=c_wood, lw=4, label="Borda Ergonômica de Pesca (0,80 m)")
ax1.text(1.2, 0.40, 'PRAÇA DE PESCA\n(Popa Baixa Desimpedida)', ha='center', va='center', fontsize=7.5, fontweight='bold', color='white')

# Motores de popa / Eixos na Popa
ax1.add_patch(patches.Rectangle((-0.4, 0.1), 0.4, 0.7, facecolor='#334155', edgecolor='black', lw=1.2))
ax1.plot([-0.2, -0.2], [0.1, -0.45], color='#334155', lw=4)
ax1.add_patch(patches.Polygon([[-0.4, -0.45], [-0.1, -0.45], [-0.25, -0.58]], closed=True, facecolor='#F59E0B')) # Hélice
ax1.text(-0.5, 0.45, '2x Motores\n(25-30 HP)', ha='right', va='center', fontsize=7, fontweight='bold', color='#B45309')

# Cotas de Referência
ax1.annotate('', xy=(0, -0.85), xytext=(8.5, -0.85), arrowprops=dict(arrowstyle='<->', color='black', lw=1.2))
ax1.text(4.25, -1.05, 'Comprimento Total (LOA) = 8,50 m (LWL = 8,10 m)', ha='center', va='top', fontsize=8.5, fontweight='bold')

ax1.annotate('', xy=(8.7, 0), xytext=(8.7, 1.20), arrowprops=dict(arrowstyle='<->', color=c_hull, lw=1.2))
ax1.text(8.85, 0.60, 'Proa Lançada\n(+1,20 m)', ha='left', va='center', fontsize=7.5, fontweight='bold', color=c_hull)

ax1.set_xlim(-1.0, 10.0)
ax1.set_ylim(-1.3, 2.9)
ax1.set_aspect('equal')
ax1.set_xlabel("Comprimento (metros)", fontsize=8)
ax1.set_ylabel("Altura (metros)", fontsize=8)
ax1.legend(loc='upper right', fontsize=7.5)


# -------------------------------------------------------------------------
# 2. PLANTA DO CASCO E CONVÉS (Top View - Geometria Catamarã Lobster)
# -------------------------------------------------------------------------
ax2 = fig.add_subplot(2, 2, 3)
ax2.set_title("2. PLANTA DO CASCO / CONVÉS (Top View)\nBoca Total: 3,60 m | 2 Cascos Esquisitos + Praça Livre", fontsize=9.5, fontweight='bold', color=c_dark, pad=8)

y_be = 1.39
y_bb = -1.39
bw = 0.41

# Contorno dos Cascos
xp = np.linspace(0, 8.5, 100)
w_curve = np.where(xp < 5.5, bw, bw * np.sqrt(np.maximum(0, 1 - ((xp - 5.5)/3.0)**2)))

ax2.plot(xp, y_be + w_curve, color=c_dark, lw=1.8)
ax2.plot(xp, y_be - w_curve*0.8, color=c_dark, lw=1.8)
ax2.plot(xp, y_bb - w_curve, color=c_dark, lw=1.8)
ax2.plot(xp, y_bb + w_curve*0.8, color=c_dark, lw=1.8)

# Piso do Convés Fechado / Plataforma
ax2.fill([0.4, 7.8, 7.8, 0.4], [y_bb, y_bb, y_be, y_be], color='#F1F5F9', edgecolor=c_dark, lw=1.2)

# Cabine Lobster com Posto de Comando à Meia-Nau / Boreste
ax2.fill([3.0, 6.2, 6.2, 3.0], [-1.2, -1.2, 1.2, 1.2], color=c_house, edgecolor=c_dark, lw=1.5)
ax2.add_patch(patches.Rectangle((3.8, 0.3), 1.2, 0.8, facecolor='#93C5FD', edgecolor='#1D4ED8', lw=1.2))
ax2.text(4.4, 0.7, 'Comando BE\n(Timão)', ha='center', va='center', fontsize=7, fontweight='bold', color='#1E3A8A')
ax2.text(4.6, -0.4, 'Cabine / Acesso\nBeliches Vante', ha='center', va='center', fontsize=7, color='#475569')

# Praça de Trabalho de Popa com Porões
ax2.fill([0.4, 3.0, 3.0, 0.4], [-1.6, -1.6, 1.6, 1.6], color='#E2E8F0', edgecolor=c_dark, lw=1.2)
ax2.add_patch(patches.Rectangle((0.8, y_be - 0.35), 1.6, 0.7, facecolor='#BAE6FD', edgecolor=c_dark, lw=1))
ax2.text(1.6, y_be, 'Porão 1\n(500 kg)', ha='center', va='center', fontsize=6.5, fontweight='bold', color=c_dark)

ax2.add_patch(patches.Rectangle((0.8, y_bb - 0.35), 1.6, 0.7, facecolor='#BAE6FD', edgecolor=c_dark, lw=1))
ax2.text(1.6, y_bb, 'Porão 2\n(500 kg)', ha='center', va='center', fontsize=6.5, fontweight='bold', color=c_dark)

# Guincho recolhedor no bordo de Boreste (estilo Lobster)
ax2.add_patch(patches.Circle((2.5, y_be + 0.3), 0.25, facecolor='#DC2626', edgecolor='black', lw=1.2))
ax2.text(2.5, y_be + 0.3, 'G', ha='center', va='center', fontsize=7, fontweight='bold', color='white')
ax2.text(2.5, y_be + 0.65, 'Guincho\nEspinhel', ha='center', va='center', fontsize=6.5, fontweight='bold', color='#DC2626')

ax2.set_xlim(-0.8, 9.5)
ax2.set_ylim(-2.2, 2.4)
ax2.set_aspect('equal')
ax2.set_xlabel("Comprimento (m)", fontsize=8)
ax2.set_ylabel("Boca (m)", fontsize=8)


# -------------------------------------------------------------------------
# 3. PLANO DE BALIZAS / SEÇÃO TRANSVERSAL (Body Plan & Front View)
# -------------------------------------------------------------------------
ax3 = fig.add_subplot(2, 2, 4)
ax3.set_title("3. SEÇÃO MESTRA E FORMA DOS CASCOS (Front View)\nV Profundo na Proa + Estabilidade Lateral Catamarã", fontsize=9.5, fontweight='bold', color=c_dark, pad=8)

# Desenho dos 2 semi-cascos frontais
def draw_cat_lobster_front(ax, cx):
    # Formato do semi-casco com bojo redondo / aresta suave
    xs = [cx - bw, cx - bw*0.95, cx - bw*0.7, cx, cx + bw*0.7, cx + bw*0.95, cx + bw]
    ys = [0.85, 0.1, -0.35, -0.55, -0.35, 0.1, 0.85]
    ax.fill(xs, ys, color=c_hull, edgecolor=c_dark, lw=1.8)
    # Fundo vermelho vivo
    ax.fill_between([cx - bw*0.9, cx + bw*0.9], [-0.55, -0.55], [0, 0], color=c_bottom, alpha=0.9)

draw_cat_lobster_front(ax3, -1.39)
draw_cat_lobster_front(ax3, 1.39)

# Ponte central e túnel alto (clearance)
ax3.plot([-1.39 + bw, 1.39 - bw], [0.85, 0.85], color=c_dark, lw=2.5) # Piso
ax3.plot([-1.39 + bw, 1.39 - bw], [0.35, 0.35], color=c_dark, lw=2)   # Teto túnel
ax3.fill_between([-1.39 + bw, 1.39 - bw], [0.35, 0.35], [0.85, 0.85], color='#F1F5F9')

# Cabine Central com para-brisa frontal
ax3.fill([-1.1, -1.1, 1.1, 1.1], [0.85, 1.95, 1.95, 0.85], color=c_house, edgecolor=c_dark, lw=1.5)
ax3.fill([-0.9, -0.9, 0.9, 0.9], [1.15, 1.80, 1.80, 1.15], color=c_glass, alpha=0.8, edgecolor=c_dark, lw=1.2)
ax3.text(0, 1.48, 'Para-brisa Panorâmico', ha='center', va='center', fontsize=7, fontweight='bold', color=c_dark)

# Linha d'Água
ax3.axhline(0, color=c_wl, lw=1.5, linestyle='--', label="Linha d'Água (WL = 0)")

# Cotas
ax3.annotate('', xy=(-1.39 - bw, 2.2), xytext=(1.39 + bw, 2.2), arrowprops=dict(arrowstyle='<->', color='black', lw=1.2))
ax3.text(0, 2.3, 'Boca Total B = 3,60 m', ha='center', va='bottom', fontsize=8, fontweight='bold')

ax3.annotate('', xy=(0, 0), xytext=(0, 0.35), arrowprops=dict(arrowstyle='<->', color='#D97706', lw=1.2))
ax3.text(0.1, 0.17, 'Vão do Túnel\nHc = 0,58 m', ha='left', va='center', fontsize=7, fontweight='bold', color='#D97706')

ax3.set_xlim(-2.3, 2.3)
ax3.set_ylim(-1.0, 2.6)
ax3.set_aspect('equal')
ax3.set_xlabel("Largura (m)", fontsize=8)
ax3.set_ylabel("Altura (m)", fontsize=8)
ax3.legend(loc='lower right', fontsize=7)

plt.tight_layout()
output_img = "/home/magdalena/eee/alunos/alberico-de-carvalho-santiago/desenho_casco_lobster_8_5m.png"
plt.savefig(output_img, dpi=300, bbox_inches='tight')
plt.close()
print("Desenho do casco Lobster gerado com sucesso!")
