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

# Configuração da figura com 2 vistas: Perfil (Elevação Lateral) e Planta (Convés/Arranjo Geral)
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(14, 10), dpi=150)

# Cores e Estilo
hull_wood = '#8B4513'
deck_wood = '#D2B48C'
water_blue = '#1E90FF'
straw_roof = '#DAA520'
sail_color = '#FDF5E6'
mast_wood = '#5C4033'

# ----------------------------------------------------
# 1. VISTA DE PERFIL LATERAL (ELEVAÇÃO)
# ----------------------------------------------------
ax1.set_title("VISTA LATERAL (PERFIL) - BARCO-ESCOLA DAS ÁGUAS (15,0m x 4,50m)\nConceito Híbrido: Canoa Tupinambá + Saveiro da Bahia", fontsize=11, fontweight='bold')

# Linha d'água (WL)
ax1.axhline(0, color=water_blue, linestyle='-', lw=2, label='Linha d\'Água de Projeto (DWL)')
ax1.fill_between([-1, 16], -2, 0, color=water_blue, alpha=0.15)

# Casco - Perfil
# X: 0 (Popa) até 15 (Proa)
x_hull = [0.0, 0.2, 0.8, 4.0, 9.0, 13.5, 15.0, 14.2, 11.0, 6.0, 1.0, 0.0]
z_hull = [0.8, -0.8, -0.95, -0.95, -0.90, -0.5, 1.2, 1.0, 0.8, 0.75, 0.75, 0.8]

# Polígono do Casco
hull_poly = patches.Polygon(list(zip(x_hull, z_hull)), closed=True, facecolor='#C49A45', edgecolor='#4A2E18', lw=2)
ax1.add_patch(hull_poly)

# Linha do fundo da quilha / sapata
ax1.plot([0.5, 1.0, 12.0, 14.0], [-0.95, -1.05, -0.95, -0.3], color='#3E2723', lw=3.5, label='Quilha Corrida de Proteção')

# Leme de madeira e hélice na popa
ax1.plot([-0.2, -0.2, 0.3, 0.3], [0.5, -1.0, -1.0, 0.5], color='#4A2E18', lw=2) # Cana/porta do leme
ax1.scatter([0.5], [-0.75], s=80, color='darkgoldenrod', zorder=5, label='Hélice do Motor Auxiliar')

# Cobertura tradicional de madeira e palha (Toldo da Escola das Águas)
# X de 3.5 a 11.5 (8 metros de sombra)
x_roof = [3.5, 3.5, 11.5, 11.5]
z_roof = [0.8, 2.3, 2.2, 0.8]
# Esteios de sustentação
for pos_x in [3.8, 5.8, 7.8, 9.8, 11.2]:
    ax1.plot([pos_x, pos_x], [0.75, 2.25], color='#5D4037', lw=2.5)

# Teto de palha curvado
roof_curve_x = np.linspace(3.4, 11.6, 50)
roof_curve_z = 2.28 + 0.15 * np.sin(np.pi * (roof_curve_x - 3.4) / 8.2)
ax1.plot(roof_curve_x, roof_curve_z, color='#B8860B', lw=4, label='Teto de Madeira e Palha Trançada')
ax1.fill_between(roof_curve_x, roof_curve_z - 0.1, roof_curve_z, color=straw_roof, alpha=0.8)

# Mastro e Velas de Saveiro (Vela de Içar / Carangueja)
mast_x = 3.2
mast_top = 11.5
ax1.plot([mast_x, mast_x], [0.5, mast_top], color=mast_wood, lw=4, label='Mastro de Saveiro')

# Carangueja (Gaff) e Retranca (Boom)
ax1.plot([mast_x, 10.5], [mast_top - 0.5, 9.8], color=mast_wood, lw=2.5) # Carangueja
ax1.plot([mast_x, 11.8], [1.3, 1.5], color=mast_wood, lw=3) # Retranca

# Polígono da Vela Principal (Grande)
sail_x = [mast_x, 10.5, 11.8, mast_x]
sail_z = [mast_top - 0.5, 9.8, 1.5, 1.3]
sail_poly = patches.Polygon(list(zip(sail_x, sail_z)), closed=True, facecolor=sail_color, edgecolor='#C0C0C0', alpha=0.85, lw=1.5, label='Vela Tradicional de Saveiro')
ax1.add_patch(sail_poly)

# Estai de Proa e Vela de Proa (Buja/Genoa)
ax1.plot([mast_x, 15.0], [mast_top - 1.0, 1.2], color='gray', lw=1.5, linestyle=':')
sail_jib_x = [mast_x, 14.6, 4.0]
sail_jib_z = [mast_top - 1.2, 1.3, 1.1]
jib_poly = patches.Polygon(list(zip(sail_jib_x, sail_jib_z)), closed=True, facecolor=sail_color, edgecolor='#C0C0C0', alpha=0.85, lw=1.5)
ax1.add_patch(jib_poly)

# Ajustes do gráfico de perfil
ax1.set_xlim(-1.5, 16.5)
ax1.set_ylim(-1.8, 12.5)
ax1.set_xlabel("Comprimento (metros)", fontsize=9)
ax1.set_ylabel("Altura (metros)", fontsize=9)
ax1.grid(True, linestyle=':', alpha=0.5)
ax1.legend(loc='upper right', fontsize=8, ncol=2)


# ----------------------------------------------------
# 2. VISTA SUPERIOR (PLANTA DO CONVÉS / ARRANJO GERAL)
# ----------------------------------------------------
ax2.set_title("PLANTA DO CONVÉS (ARRANJO GERAL MULTIUSO)", fontsize=11, fontweight='bold')

# Casco em Planta (Boca 4.5m -> Meia-boca 2.25m)
x_deck = np.linspace(0, 15.0, 100)
# Curva de boca inspirada em canoa na proa e saveiro a meia-nau/ré
y_deck = 2.25 * (1 - ((x_deck - 6.5)/7.5)**2)**0.5
y_deck = np.nan_to_num(y_deck)
# Ajuste fino da proa afilada
y_deck = np.where(x_deck > 13.0, y_deck * (15.0 - x_deck)/2.0, y_deck)

ax2.plot(x_deck, y_deck, color='#4A2E18', lw=2)
ax2.plot(x_deck, -y_deck, color='#4A2E18', lw=2)
ax2.plot([0, 0], [-1.6, 1.6], color='#4A2E18', lw=2) # Espelho de popa
ax2.fill_between(x_deck, -y_deck, y_deck, color=deck_wood, alpha=0.4)

# Zonas do Convés
# 1. Proa (0 a 3m da proa -> X de 12.0 a 15.0)
ax2.axvline(12.0, color='brown', linestyle='--', lw=1)
ax2.text(13.5, 0, "PLATAFORMA\nDE PROA\n(Canoa)", ha='center', va='center', fontsize=8, fontweight='bold')

# Mastro
ax2.scatter([3.2], [0], s=120, color=mast_wood, zorder=5)
ax2.text(3.2, 0.4, "Mastro", ha='center', fontsize=7, fontweight='bold')

# 2. Praça da Escola / Área Multiuso (X de 4.0 a 10.5)
ax2.fill_between([3.5, 11.5], [-2.1, -2.1], [2.1, 2.1], color='#FFE4B5', alpha=0.3, hatch='//')
ax2.text(7.5, 0, "PRAÇA DA ESCOLA DAS ÁGUAS\n(Convés corrido sombreado)\n- 40 a 50 assentos p/ transporte\n- 20 a 25 lugares em roda p/ aula\n- 20 redes armadas p/ pernoite", ha='center', va='center', fontsize=8, fontweight='bold', bbox=dict(boxstyle="round,pad=0.3", fc="white", ec="orange", alpha=0.9))

# Bancos corridos laterais rebatíveis
ax2.plot([4.0, 10.5], [1.8, 1.8], color='#8B4513', lw=4, label='Bancos Laterais Dobráveis')
ax2.plot([4.0, 10.5], [-1.8, -1.8], color='#8B4513', lw=4)

# 3. Módulos de Apoio (X de 1.8 a 3.5)
# Sanitário a Boreste (Y > 0)
wc_box = patches.Rectangle((1.6, 0.3), 1.8, 1.5, facecolor='#E0F7FA', edgecolor='#006064', lw=1.5)
ax2.add_patch(wc_box)
ax2.text(2.5, 1.05, "BANHEIRO\n(c/ Tanque Séptico)", ha='center', va='center', fontsize=7, fontweight='bold')

# Cozinha/Copa a Bombordo (Y < 0)
galley_box = patches.Rectangle((1.6, -1.8), 1.8, 1.5, facecolor='#FFF3E0', edgecolor='#E65100', lw=1.5)
ax2.add_patch(galley_box)
ax2.text(2.5, -1.05, "COPA / COZINHA\n(Fogão + Pia)", ha='center', va='center', fontsize=7, fontweight='bold')

# 4. Timoneria e Popa (X de 0 a 1.6)
ax2.text(0.8, 0, "TIMONEIRO\n& MOTOR\n(Sob o piso)", ha='center', va='center', fontsize=7, fontweight='bold')
ax2.plot([0.3, 1.2], [0, 0], color='black', lw=3) # Cana de leme

ax2.set_xlim(-1.5, 16.5)
ax2.set_ylim(-2.8, 2.8)
ax2.set_xlabel("Comprimento (metros)", fontsize=9)
ax2.set_ylabel("Boca / Largura (metros)", fontsize=9)
ax2.grid(True, linestyle=':', alpha=0.5)

plt.tight_layout()
plt.savefig('/home/magdalena/eee/alunos/luciano-mandu/desenho_conceitual_barco_escola.png', dpi=200)
print("Desenho conceitual completo gerado com sucesso.")
