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

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)

c_dark = '#0F172A'       # Slate Dark
c_hull = '#1E3A8A'       # Azul Marinho Clássico (Costado)
c_bottom = '#B91C1C'     # Vermelho Óxido / Anti-incrustante (Fundo)
c_wood = '#D97706'       # Madeira / Acabamento teca
c_house = '#F8FAFC'      # Casaria branca
c_glass = '#38BDF8'      # Vidros
c_wl = '#0284C7'         # Linha d'água de referência
c_text = '#1E293B'

# -------------------------------------------------------------------------
# 1. PERFIL LONGITUDINAL (LOBSTER BOAT MONOCASCO - 8,50 m)
# -------------------------------------------------------------------------
ax1 = fig.add_subplot(2, 1, 1)
ax1.set_title("1. PERFIL LONGITUDINAL (Side View) — LOBSTER BOAT MONOCASCO 8,50 m\nProa Alta Downeast, Cabine Semi-fechada, Quilha Corrida / Skeg e Ampla Praça de Popa", fontsize=11, fontweight='bold', color=c_dark, pad=10)

# Sheerline clássica do Lobster Monocasco
# x=0 a 8.5m. Popa em +0.75m, Proa em +1.35m
x_s = np.linspace(0, 8.5, 100)
sheer_y = 0.75 + 0.60 * (x_s / 8.5)**2.4

# Fundo / Quilha corrida com Skeg de proteção
# Popa x=0 (fundo a -0.65m), Eixo do hélice a -0.75m, Quilha corrida até x=6.0m subindo para a roda de proa em x=8.5m
x_k = np.array([0, 0, 1.2, 5.5, 7.5, 8.4, 8.5])
y_k = np.array([0.75, -0.65, -0.75, -0.70, -0.40, 0.6, 1.35])

# Costado Azul
poly_x = np.concatenate([x_s, [8.5, 8.4, 7.5, 5.5, 1.2, 0, 0]])
poly_y = np.concatenate([sheer_y, [1.35, 0.6, -0.40, -0.70, -0.75, -0.65, 0.75]])
ax1.fill(poly_x, poly_y, color=c_hull, edgecolor=c_dark, lw=2, label="Costado Azul Marinho (PRFV)")

# Obra Viva / Fundo Vermelho
x_bot = [0, 0, 1.2, 5.5, 7.5, 7.9, 0]
y_bot = [0, -0.65, -0.75, -0.70, -0.40, 0, 0]
ax1.fill(x_bot, y_bot, color=c_bottom, edgecolor='black', lw=1.2, label="Obra Viva / Fundo (-0,75 m)")

# Linha d'Água (Bootstripe branca)
ax1.axhline(0, color=c_wl, lw=1.8, linestyle='--', label="Linha d'Água (LWL = 7,80 m)")
ax1.plot([0, 7.9], [0, 0], color='white', lw=3)

# Cabine Típica Downeast (Cuddy Cabin de proa + Casaria com para-brisa)
cab_x = [3.2, 6.4, 5.9, 2.7, 2.7, 3.2]
cab_y = [0.82, 1.05, 2.05, 2.05, 0.80, 0.80]
ax1.fill(cab_x, cab_y, color=c_house, edgecolor=c_dark, lw=1.8)

# Janelas da Casaria
ax1.add_patch(patches.Polygon([[5.8, 1.15], [6.1, 1.15], [5.7, 1.90], [5.4, 1.90]], closed=True, facecolor=c_glass, edgecolor=c_dark, lw=1.2))
ax1.add_patch(patches.Polygon([[4.4, 1.15], [5.2, 1.15], [4.9, 1.90], [4.1, 1.90]], closed=True, facecolor=c_glass, edgecolor=c_dark, lw=1.2))
ax1.add_patch(patches.Polygon([[3.0, 1.15], [3.9, 1.15], [3.7, 1.90], [2.9, 1.90]], closed=True, facecolor=c_glass, edgecolor=c_dark, lw=1.2))

# Vigias da cabine de descanso na vante
ax1.add_patch(patches.Ellipse((6.9, 0.85), 0.35, 0.18, facecolor=c_glass, edgecolor='white', lw=1.5))
ax1.add_patch(patches.Ellipse((7.6, 1.00), 0.35, 0.18, facecolor=c_glass, edgecolor='white', lw=1.5))

# Teto Hardtop estendido com mastro de sinais/radar
ax1.plot([2.5, 6.0], [2.08, 2.08], color=c_dark, lw=4)
ax1.plot([4.3, 4.3], [2.08, 2.75], color=c_dark, lw=2.5)
ax1.plot([3.9, 4.7], [2.55, 2.55], color=c_dark, lw=2)
ax1.text(4.3, 2.85, 'Radar / Luz de Topo', ha='center', fontsize=7, fontweight='bold', color=c_dark)

# Linha de Eixo, Hélice protegido por Skeg e Leme
ax1.plot([0.3, 1.8], [-0.55, -0.30], color='#EA580C', lw=3.5) # Eixo
ax1.add_patch(patches.Rectangle((0.15, -0.65), 0.15, 0.35, facecolor='#F59E0B', edgecolor='#9A3412', lw=1.2)) # Hélice
ax1.add_patch(patches.Rectangle((-0.15, -0.75), 0.12, 0.55, facecolor='#475569', edgecolor='black', lw=1.2)) # Leme
ax1.plot([-0.1, 1.5], [-0.75, -0.75], color='black', lw=4) # Sapata de quilha (skeg) protegendo o hélice

# Borda de madeira / praça de pesca
ax1.plot([0, 2.7], [0.75, 0.80], color=c_wood, lw=4, label="Borda de Pesca (0,75 m)")
ax1.text(1.3, 0.40, 'PRAÇA DE PESCA LIVRE\n(12 m² úteis)', ha='center', va='center', fontsize=8, fontweight='bold', color='white')

# Cotas
ax1.annotate('', xy=(0, -0.95), xytext=(8.5, -0.95), arrowprops=dict(arrowstyle='<->', color='black', lw=1.2))
ax1.text(4.25, -1.15, 'Comprimento Total (LOA) = 8,50 m | LWL = 7,80 m', ha='center', va='top', fontsize=8.5, fontweight='bold')

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

ax1.set_xlim(-0.8, 10.0)
ax1.set_ylim(-1.4, 3.1)
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 BAIXA / ARRANJO DE CONVÉS (Top View - Boca = 2,90 m)
# -------------------------------------------------------------------------
ax2 = fig.add_subplot(2, 2, 3)
ax2.set_title("2. PLANTA DO CASCO / CONVÉS (Top View)\nBoca Máxima: 2,90 m | Praça de Popa, Comando BE e Cabine Vante", fontsize=9.5, fontweight='bold', color=c_dark, pad=8)

# Contorno do monocasco em planta
xp = np.linspace(0, 8.5, 100)
# Boca máxima de 2.90m (semi-boca = 1.45m) na meia-nau (x=4.5 a 5.0m), popa com 2.40m (semi-boca = 1.20m)
w_half = np.where(xp < 5.0, 1.20 + 0.25 * (xp/5.0)**1.5, 1.45 * np.sqrt(np.maximum(0, 1 - ((xp - 5.0)/3.5)**2)))

ax2.plot(xp, w_half, color=c_dark, lw=2)
ax2.plot(xp, -w_half, color=c_dark, lw=2)
ax2.plot([0, 0], [-1.20, 1.20], color=c_dark, lw=2) # Espelho de popa reto/arredondado

# Piso do Convés
ax2.fill_between(xp, -w_half, w_half, color='#F8FAFC')

# Cabine / Casaria
ax2.fill([3.2, 6.4, 6.4, 3.2], [-1.20, -1.20, 1.20, 1.20], color=c_house, edgecolor=c_dark, lw=1.5)

# Posto de comando no bordo de Boreste (estilo clássico Lobster)
ax2.add_patch(patches.Rectangle((3.6, 0.2), 1.4, 0.9, facecolor='#93C5FD', edgecolor='#1D4ED8', lw=1.2))
ax2.text(4.3, 0.65, 'Comando BE\n(Timão/Manetes)', ha='center', va='center', fontsize=7, fontweight='bold', color='#1E3A8A')

# Acesso à cabine de vante (beliches)
ax2.text(4.8, -0.5, 'Entrada Cabine\n(2 Beliches Vante)', ha='center', va='center', fontsize=7, color='#475569')

# Porão Térmico Central de Pescado (1.000 kg + Gelo)
ax2.add_patch(patches.Rectangle((1.0, -0.75), 1.8, 1.5, facecolor='#BAE6FD', edgecolor=c_dark, lw=1.5))
ax2.text(1.9, 0, 'PORÃO DE PESCADO\n(PUR 80 mm)\n1.000 kg Peixe + Gelo', ha='center', va='center', fontsize=7.5, fontweight='bold', color=c_dark)

# Guincho recolhedor no bordo de Boreste
ax2.add_patch(patches.Circle((2.8, 1.25), 0.22, facecolor='#DC2626', edgecolor='black', lw=1.2))
ax2.text(2.8, 1.25, 'G', ha='center', va='center', fontsize=7, fontweight='bold', color='white')
ax2.text(2.8, 1.55, 'Guincho\nEspinhel', ha='center', va='bottom', fontsize=6.5, fontweight='bold', color='#DC2626')

# Mesa de Evisceração na Popa
ax2.add_patch(patches.Rectangle((0.1, -0.6), 0.6, 1.2, facecolor='#CBD5E1', edgecolor=c_dark, lw=1))
ax2.text(0.4, 0, 'Mesa de\nCorte', ha='center', va='center', fontsize=6.5, fontweight='bold')

# Cota Boca
ax2.annotate('', xy=(4.8, -1.45), xytext=(4.8, 1.45), arrowprops=dict(arrowstyle='<->', color='black', lw=1.2))
ax2.text(5.0, 0, 'Boca = 2,90 m', ha='left', va='center', fontsize=7.5, fontweight='bold')

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


# -------------------------------------------------------------------------
# 3. BALIZAS TRANSVERSAIS DO CASCO MONOCASCO (Body Plan - Semi-Deslocamento)
# -------------------------------------------------------------------------
ax3 = fig.add_subplot(2, 2, 4)
ax3.set_title("3. PLANO DE BALIZAS / SEÇÃO MESTRA (Body Plan)\nV Profundo na Proa + Fundo Plano com Bojo Redondo na Popa", fontsize=9.5, fontweight='bold', color=c_dark, pad=8)

# Balizas de Ré (Esquerda) e Vante (Direita)
# Baliza Mestra (B4 - x=4,0m): B=2,90m (half=1,45m), D=1,45m, T=0,75m
b_half_max = 1.45
d_bottom = 0.75
deck_h = 0.70

# Seção Mestra Completa
xs_mid = [-b_half_max, -b_half_max*0.95, -b_half_max*0.6, 0, b_half_max*0.6, b_half_max*0.95, b_half_max]
ys_mid = [deck_h, 0.1, -0.55, -d_bottom, -0.55, 0.1, deck_h]
ax3.fill(xs_mid, ys_mid, color=c_hull, edgecolor=c_dark, lw=2)
# Fundo vermelho
ax3.fill_between([-b_half_max*0.9, b_half_max*0.9], [-d_bottom, -d_bottom], [0, 0], color=c_bottom, alpha=0.9)

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

# Quilha Central Maciça / Skeg
ax3.add_patch(patches.Rectangle((-0.08, -d_bottom - 0.10), 0.16, 0.15, facecolor='#1E293B', edgecolor='black', lw=1.2))
ax3.text(0, -d_bottom - 0.18, 'Quilha Maciça / Skeg', ha='center', va='top', fontsize=6.8, fontweight='bold', color='#1E293B')

# Casaria no topo da Seção Mestra
ax3.fill([-1.1, -1.1, 1.1, 1.1], [deck_h, deck_h + 1.25, deck_h + 1.25, deck_h], color=c_house, edgecolor=c_dark, lw=1.5)
ax3.fill([-0.9, -0.9, 0.9, 0.9], [deck_h + 0.35, deck_h + 1.10, deck_h + 1.10, deck_h + 0.35], color=c_glass, alpha=0.8, edgecolor=c_dark, lw=1.2)
ax3.text(0, deck_h + 0.72, 'Para-brisa Frontal', ha='center', va='center', fontsize=7, fontweight='bold', color=c_dark)

# Cotas
ax3.annotate('', xy=(-b_half_max, deck_h + 1.45), xytext=(b_half_max, deck_h + 1.45), arrowprops=dict(arrowstyle='<->', color='black', lw=1.2))
ax3.text(0, deck_h + 1.55, 'Boca Máxima = 2,90 m', ha='center', va='bottom', fontsize=8, fontweight='bold')

ax3.annotate('', xy=(1.6, 0), xytext=(1.6, -d_bottom), arrowprops=dict(arrowstyle='<->', color='#B91C1C', lw=1.2))
ax3.text(1.7, -d_bottom/2, 'Calado T = 0,75 m', ha='left', va='center', fontsize=7.5, fontweight='bold', color='#B91C1C')

ax3.set_xlim(-2.2, 2.2)
ax3.set_ylim(-1.2, 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_lobster_monocasco_8_5m.png"
plt.savefig(output_img, dpi=300, bbox_inches='tight')
plt.close()
print("Desenho Lobster Monocasco gerado com sucesso!")
