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

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

c_hull = '#1E3A8A'       # Azul Marinho Clássico (Costado / Obra Morta)
c_bottom = '#B91C1C'     # Vermelho Anti-incrustante (Fundo / Obra Viva)
c_deck = '#F8FAFC'       # Convés branco
c_sheer = '#D97706'      # Friso de madeira / Verdugo
c_wl = '#0284C7'         # Linha d'Água (WL)
c_dark = '#0F172A'       # Slate Dark
c_annotation = '#1E293B' # Texto

ax = fig.add_subplot(1, 1, 1)
ax.set_title("VISTA LATERAL DO CASCO (PERFIL LONGITUDINAL DE UM CASCO DE 8,50 m)\nNomenclatura Naval das Partes e Geometria da Obra Viva e Obra Morta", fontsize=12, fontweight='bold', color=c_dark, pad=12)

# Curva da Linha de Borda (Sheerline) - Proa alta (+1,35m) caindo suave para a popa (+0,80m)
x_s = np.linspace(0, 8.5, 120)
sheer_y = 0.80 + 0.55 * (x_s / 8.5)**2.3

# Linha da Quilha e Roda de Proa (Perfil do Fundo)
# Popa x=0 (fundo a -0.65m), Skeg a -0.75m em x=1.2m, Quilha corrida até x=6.0m, Roda de proa até x=8.5m em y=+1.35m
x_k = np.array([0, 0, 1.2, 5.5, 7.5, 8.4, 8.5])
y_k = np.array([0.80, -0.65, -0.75, -0.70, -0.40, 0.60, 1.35])

# 1. Costado / Obra Morta (Parte do casco que fica ACIMA da linha d'água)
poly_hull_x = np.concatenate([x_s, [8.5, 8.4, 7.5, 5.5, 1.2, 0, 0]])
poly_hull_y = np.concatenate([sheer_y, [1.35, 0.60, -0.40, -0.70, -0.75, -0.65, 0.80]])
ax.fill(poly_hull_x, poly_hull_y, color=c_hull, edgecolor=c_dark, lw=2.5, label="Costado (Obra Morta - Acima da Água)")

# 2. Fundo / Obra Viva (Parte do casco que fica SUBMERSA abaixo da linha d'água WL = 0)
x_bot = [0, 0, 1.2, 5.5, 7.5, 7.95, 0]
y_bot = [0, -0.65, -0.75, -0.70, -0.40, 0, 0]
ax.fill(x_bot, y_bot, color=c_bottom, edgecolor='black', lw=1.5, label="Fundo / Carena (Obra Viva - Submersa)")

# 3. Linha de Flotação / Linha d'Água (Bootstripe branca)
ax.axhline(0, color=c_wl, lw=2.0, linestyle='--', label="Linha d'Água de Projeto (WL = 0,00 m)")
ax.plot([0, 7.95], [0, 0], color='white', lw=3.5)

# 4. Verdugo de Proteção / Defletor de Respingo (Spray Rail)
ax.plot(x_s, sheer_y, color=c_sheer, lw=4, label="Verdugo Superior / Linha de Borda (Sheerline)")
ax.plot([4.0, 8.2], [0.20, 0.85], color='white', lw=3, label="Defletor de Respingo (Spray Rail)")

# 5. Espelho de Popa (Transom) e Roda de Proa (Stem)
ax.plot([0, 0], [-0.65, 0.80], color=c_dark, lw=3)
ax.plot([7.95, 8.5], [0, 1.35], color=c_dark, lw=3)

# 6. Linha de Eixo, Hélice, Skeg e Leme
ax.plot([0.3, 1.8], [-0.55, -0.30], color='#EA580C', lw=4) # Eixo
ax.add_patch(patches.Rectangle((0.15, -0.65), 0.15, 0.35, facecolor='#F59E0B', edgecolor='#9A3412', lw=1.2)) # Hélice
ax.add_patch(patches.Rectangle((-0.18, -0.75), 0.12, 0.55, facecolor='#475569', edgecolor='black', lw=1.2)) # Leme
ax.plot([-0.15, 1.6], [-0.75, -0.75], color=c_dark, lw=4.5) # Sapata do Skeg

# -------------------------------------------------------------------------
# ANOTAÇÕES DIDÁTICAS DE TODAS AS PARTES DO CASCO
# -------------------------------------------------------------------------
# Proa / Roda de Proa
ax.annotate('RODA DE PROA (Stem)\nCorta as ondas', xy=(8.45, 1.1), xytext=(7.2, 1.8),
            arrowprops=dict(facecolor=c_dark, arrowstyle='->', lw=1.5), fontsize=8.5, fontweight='bold', color=c_dark)

# Borda Livre de Proa
ax.annotate('FRANCOBORDO / BORDA LIVRE DE PROA\n(+1,35 m acima da água)', xy=(8.5, 0.7), xytext=(6.5, -0.9),
            arrowprops=dict(facecolor=c_hull, arrowstyle='->', lw=1.2), fontsize=8, fontweight='bold', color=c_hull)

# Spray Rail
ax.annotate('DEFLETOR DE RESPINGO (Spray Rail)\nJoga a água para longe do convés', xy=(6.5, 0.55), xytext=(4.0, 1.5),
            arrowprops=dict(facecolor='#0284C7', arrowstyle='->', lw=1.2), fontsize=8, fontweight='bold', color='#0284C7')

# Costado / Obra Morta
ax.text(4.25, 0.45, 'COSTADO / OBRA MORTA (Parte Emersa)', ha='center', va='center', fontsize=9, fontweight='bold', color='white')

# Obra Viva / Fundo
ax.text(3.5, -0.35, 'OBRA VIVA / CARENA (Parte Submersa)', ha='center', va='center', fontsize=8.5, fontweight='bold', color='white')

# Quilha Corrida e Skeg
ax.annotate('QUILHA CORRIDA COM SKEG\nProtege o hélice e o leme contra impactos', xy=(1.0, -0.75), xytext=(0.5, -1.35),
            arrowprops=dict(facecolor=c_dark, arrowstyle='->', lw=1.5), fontsize=8.5, fontweight='bold', color=c_dark)

# Popa / Espelho de Popa
ax.annotate('ESPELHO DE POPA (Transom)\nBorda ergonômica baixa (+0,80 m)', xy=(0, 0.6), xytext=(-0.7, 1.4),
            arrowprops=dict(facecolor=c_dark, arrowstyle='->', lw=1.5), fontsize=8, fontweight='bold', color=c_dark)

# Leme e Hélice
ax.annotate('LEME E HÉLICE\n100% protegidos pela quilha', xy=(-0.1, -0.5), xytext=(-0.7, -0.8),
            arrowprops=dict(facecolor='#B45309', arrowstyle='->', lw=1.2), fontsize=8, fontweight='bold', color='#B45309')

# Cotas Principais
ax.annotate('', xy=(0, -1.05), xytext=(8.5, -1.05), arrowprops=dict(arrowstyle='<->', color='black', lw=1.5))
ax.text(4.25, -1.20, 'Comprimento Total (LOA) = 8,50 m', ha='center', va='top', fontsize=9, fontweight='bold')

ax.annotate('', xy=(0, -0.85), xytext=(7.95, -0.85), arrowprops=dict(arrowstyle='<->', color=c_wl, lw=1.2))
ax.text(4.0, -0.98, "Comprimento na Linha d'Água (LWL) = 7,95 m", ha='center', va='top', fontsize=8, fontweight='bold', color=c_wl)

ax.set_xlim(-0.9, 9.8)
ax.set_ylim(-1.5, 2.2)
ax.set_aspect('equal')
ax.set_xlabel("Comprimento Longitudinal (metros)", fontsize=8)
ax.set_ylabel("Altura a partir da Linha d'Água (metros)", fontsize=8)
ax.legend(loc='upper left', fontsize=8)

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