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_hull = '#0F2B48'       # Azul Marinho
c_bottom = '#B91C1C'     # Fundo vermelho vivo
c_spray = '#0284C7'      # Spray rails / chines
c_deck = '#F8FAFC'       # Convés branco
c_glass = '#38BDF8'      # Vidros
c_wl = '#0284C7'         # Linha d'água
c_chine = '#D97706'      # Chine longitudinal

# 1. PERFIL LONGITUDINAL (V-Hull 8,50 m)
ax1 = fig.add_subplot(2, 1, 1)
ax1.set_title("1. PERFIL LONGITUDINAL (Side View) — CASCO EM V MODERNO / MONOCASCO 8,50 m\nProa Lançada em V Profundo (Deadrise 45° a 50°) evoluindo para V Moderado na Popa (16° a 18°)", fontsize=11, fontweight='bold', color=c_hull, pad=10)

# Linha de Borda (Sheer)
x_s = np.linspace(0, 8.5, 100)
sheer_y = 0.85 + 0.55 * (x_s / 8.5)**2.2

# Linha de Fundo em V
x_k = np.array([0, 0, 4.5, 7.5, 8.5, 8.5])
y_k = np.array([0.85, -0.50, -0.50, -0.25, 0.9, 1.40])

# Costado
poly_x = np.concatenate([x_s, [8.5, 8.5, 7.5, 4.5, 0, 0]])
poly_y = np.concatenate([sheer_y, [1.40, 0.9, -0.25, -0.50, -0.50, 0.85]])
ax1.fill(poly_x, poly_y, color=c_hull, edgecolor='black', lw=2, label="Costado em PRFV")

# Fundo Vivo (Abaixo da WL)
x_bot = [0, 0, 4.5, 7.5, 7.9, 0]
y_bot = [0, -0.50, -0.50, -0.25, 0, 0]
ax1.fill(x_bot, y_bot, color=c_bottom, edgecolor='black', lw=1.2, label="Obra Viva / Fundo em V")

# Chines e Spray Rails Longitudinais (Redirecionam a água e geram sustentação dinâmica)
ax1.plot([0, 7.5], [-0.15, 0.35], color='white', lw=2.5, label="Chine / Spray Rail Principal")
ax1.plot([0, 6.0], [-0.35, 0.05], color=c_chine, lw=2.0, label="Lifting Strakes (Longarinas Hidrodinâmicas)")

# Cabine / Casaria
cab_x = [3.2, 6.2, 5.7, 2.8, 2.8, 3.2]
cab_y = [0.90, 1.10, 2.05, 2.05, 0.90, 0.90]
ax1.fill(cab_x, cab_y, color=c_deck, edgecolor=c_hull, lw=1.8)

# Janelas
ax1.add_patch(patches.Polygon([[5.5, 1.2], [5.9, 1.2], [5.5, 1.9], [5.2, 1.9]], closed=True, facecolor=c_glass, edgecolor=c_hull, lw=1.2))
ax1.add_patch(patches.Polygon([[4.2, 1.2], [5.0, 1.2], [4.7, 1.9], [4.0, 1.9]], closed=True, facecolor=c_glass, edgecolor=c_hull, lw=1.2))
ax1.add_patch(patches.Polygon([[3.0, 1.2], [3.8, 1.2], [3.6, 1.9], [2.9, 1.9]], closed=True, facecolor=c_glass, edgecolor=c_hull, lw=1.2))

# Teto Hardtop
ax1.plot([2.5, 5.8], [2.08, 2.08], color=c_hull, lw=4)

# Motor de Popa ou Centro na Popa
ax1.add_patch(patches.Rectangle((-0.45, 0.1), 0.45, 0.75, facecolor='#334155', edgecolor='black', lw=1.2))
ax1.plot([-0.22, -0.22], [0.1, -0.45], color='#334155', lw=4)
ax1.add_patch(patches.Polygon([[-0.45, -0.45], [-0.1, -0.45], [-0.27, -0.58]], closed=True, facecolor='#F59E0B'))

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

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

ax1.set_xlim(-0.8, 9.8)
ax1.set_ylim(-1.2, 2.7)
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. VISTA FRONTAL / PLANO DE BALIZAS EM V (Body Plan)
ax2 = fig.add_subplot(2, 2, 3)
ax2.set_title("2. SEÇÕES TRANSVERSAIS EM V (Body Plan)\nV Profundo na Proa vs. V Moderado na Popa", fontsize=9.5, fontweight='bold', color=c_hull, pad=8)

b_half = 1.35 # Boca = 2,70 m

# Seção de Popa (V Moderado 16° a 18°)
ys_popa = [0.85, -0.15, -0.50, -0.15, 0.85]
xs_popa = [-b_half, -b_half*0.95, 0, b_half*0.95, b_half]
ax2.plot(xs_popa, ys_popa, color='#2563EB', lw=2.5, label="Popa (V Moderado 17°)")
ax2.fill(xs_popa, ys_popa, color='#E0F2FE', alpha=0.5)

# Seção de Meia-Nau (V Intermediário 24°)
ys_mid = [0.95, -0.10, -0.58, -0.10, 0.95]
xs_mid = [-b_half*0.98, -b_half*0.90, 0, b_half*0.90, b_half*0.98]
ax2.plot(xs_mid, ys_mid, color='#D97706', lw=2, linestyle='-', label="Meia-Nau (V 24°)")

# Seção de Proa (V Profundo 48°)
ys_proa = [1.40, 0.20, -0.30, 0.20, 1.40]
xs_proa = [-0.45, -0.35, 0, 0.35, 0.45]
ax2.plot(xs_proa, ys_proa, color='#DC2626', lw=2.2, label="Proa (V Profundo 48°)")

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

# Ângulos de Deadrise destacados
ax2.plot([0, 1.25], [-0.50, -0.15], color='#2563EB', lw=1.5, linestyle=':')
ax2.text(0.7, -0.42, 'Deadrise Popa: ~17°', fontsize=7.5, fontweight='bold', color='#2563EB')

ax2.set_xlim(-1.6, 1.6)
ax2.set_ylim(-0.8, 1.6)
ax2.set_aspect('equal')
ax2.set_xlabel("Semi-Boca (m)", fontsize=8)
ax2.set_ylabel("Altura (m)", fontsize=8)
ax2.legend(loc='upper left', fontsize=7)

# 3. QUADRO COMPARATIVO: CASCO EM V vs. LOBSTER vs. CATAMARÃ
ax3 = fig.add_subplot(2, 2, 4)
ax3.axis('off')
ax3.set_title("3. COMPARAÇÃO DE COMPORTAMENTO NÁUTICO (8,50 m)", fontsize=9.5, fontweight='bold', color=c_hull, pad=8)

comp_text = """
• Casco em V (Deep-V / Modified-V):
  - Proa: V muito afilado (45° a 50°) que corta a onda violentamente.
  - Popa: V contínuo (16° a 21°) com arestas vivas (hard chine).
  - Velocidade: Projetado para planeio (18 a 30+ nós).
  - Comportamento: Maravilhoso contra o mar de proa em alta velocidade;
    porém rola mais quando parado à deriva na pesca (menor estabilidade estática).
  - Potência Necessária: Exige motor maior (90 a 200 HP).

• Casco Lobster Tradicional (Semi-Deslocamento):
  - Proa em V profundo + Meia-nau e Popa planas com quilha corrida (skeg).
  - Velocidade: Cruzeiro econômico (7 a 14 nós).
  - Comportamento: Altíssima estabilidade parado na pescaria;
    roda muito pouco e consome quase nada (30 a 75 HP).

• Catamarã (Multicasco):
  - Dois cascos finos e túnel central.
  - Altíssima estabilidade de plataforma e enorme área de convés.
"""
ax3.text(0.02, 0.98, comp_text, ha='left', va='top', fontsize=7.5, family='monospace', color='#1E293B', linespacing=1.35)

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