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

# Configuração global
plt.rcParams['font.sans-serif'] = 'DejaVu Sans'
plt.rcParams['axes.edgecolor'] = '#404040'
plt.rcParams['axes.linewidth'] = 1.2

# -----------------------------------------------------------------------------
# 1. SAVEIRO TRADICIONAL DA BAHIA DE 15M (Exemplo: Balangandã / Sombra da Lua)
# -----------------------------------------------------------------------------
fig1, (ax1, ax2) = plt.subplots(2, 1, figsize=(15, 10), dpi=180, gridspec_kw={'height_ratios': [1.3, 1]})
fig1.patch.set_facecolor('#FDFCF7')

# Perfil (Elevação)
ax1.set_facecolor('#F9F8F3')
ax1.set_title("1. SAVEIRO TRADICIONAL DA BAHIA (15,0 m) — Ex: Balangandã / Sombra da Lua\n[ VISTA DE PERFIL / ELEVAÇÃO LATERAL ]", fontsize=11, fontweight='bold', color='#3E2723', pad=10)

# Água
ax1.axhline(0, color='#1E88E5', lw=1.5, linestyle='-', label='Linha d\'Água (T = 1,00 m)')
ax1.fill_between([-2, 17], -2, 0, color='#BBDEFB', alpha=0.35)

# Casco Saveiro (LOA = 15m, X: 0 a 15)
x_sav = [0.0, 0.3, 1.2, 4.5, 9.0, 13.2, 15.0, 14.1, 11.0, 6.0, 1.0, 0.0]
z_sav = [0.85, -0.7, -1.0, -1.0, -0.95, -0.5, 1.35, 1.05, 0.80, 0.75, 0.75, 0.85]
casco_sav = patches.Polygon(list(zip(x_sav, z_sav)), closed=True, facecolor='#8D6E63', edgecolor='#3E2723', lw=2, label='Casco em Madeira Maciça')
ax1.add_patch(casco_sav)

# Quilha corrida e sapata
ax1.plot([0.8, 1.5, 12.0, 13.8], [-1.0, -1.10, -1.0, -0.3], color='#27160F', lw=4, label='Quilha Corrida')
# Leme e cana
ax1.plot([-0.2, -0.2, 0.4, 0.4], [0.6, -1.05, -1.05, 0.6], color='#3E2723', lw=2)
ax1.plot([0.2, 1.4], [0.95, 0.95], color='#27160F', lw=3) # Cana de leme

# Casaria Baixa / Escotilha de Porão de Carga
casaria_sav = patches.Rectangle((3.5, 0.75), 7.5, 0.45, facecolor='#D7CCC8', edgecolor='#4E342E', lw=1.5)
ax1.add_patch(casaria_sav)
ax1.text(7.25, 0.95, "Casaria Baixa / Acesso ao Porão de Carga (Sacaria/Piaçava/Cerâmica)", ha='center', va='center', fontsize=8, fontweight='bold', color='#3E2723')

# Mastro inteiriço e Vela de Içar (Pano Grande + Pena/Carangueja)
mast_x = 3.2
mast_top = 13.5
ax1.plot([mast_x, mast_x], [0.5, mast_top], color='#4E342E', lw=4.5, label='Mastro Inteiriço (Madeira)')
ax1.plot([mast_x, 10.8], [mast_top - 0.4, 11.2], color='#5D4037', lw=3) # Pena / Verga superior
ax1.plot([mast_x, 12.2], [1.3, 1.5], color='#5D4037', lw=3.5) # Retranca

# Pano Grande
sail_sav = patches.Polygon([(mast_x, mast_top - 0.4), (10.8, 11.2), (12.2, 1.5), (mast_x, 1.3)], closed=True, facecolor='#FFF8E1', edgecolor='#BDBDBD', alpha=0.9, lw=1.5, label='Vela de Içar (Pano de Saveiro)')
ax1.add_patch(sail_sav)

# Buja de Proa e Bico de Papagaio / Gurupés
ax1.plot([14.5, 17.5], [1.2, 1.5], color='#4E342E', lw=3) # Gurupés
ax1.plot([mast_x, 17.2], [mast_top - 1.5, 1.4], color='gray', lw=1.2, linestyle=':')
buja_sav = patches.Polygon([(mast_x, mast_top - 1.5), (17.0, 1.4), (4.5, 1.1)], closed=True, facecolor='#FFF8E1', edgecolor='#BDBDBD', alpha=0.9, lw=1.5)
ax1.add_patch(buja_sav)

ax1.set_xlim(-1.5, 18.5)
ax1.set_ylim(-1.6, 14.5)
ax1.set_ylabel("Altura (m)", fontsize=9)
ax1.grid(True, linestyle=':', alpha=0.5)
ax1.legend(loc='upper right', fontsize=8, ncol=2)

# Planta (Convés / Arranjo)
ax2.set_facecolor('#F9F8F3')
ax2.set_title("[ PLANTA BAIXA / ARRANJO GERAL DO CONVÉS ]", fontsize=10, fontweight='bold', color='#3E2723')

x_d = np.linspace(0, 15.0, 100)
y_d = 2.25 * (1 - ((x_d - 6.8)/7.8)**2)**0.5
y_d = np.nan_to_num(y_d)
y_d = np.where(x_d > 13.5, y_d * (15.0 - x_d)/1.5, y_d)

ax2.plot(x_d, y_d, color='#3E2723', lw=2)
ax2.plot(x_d, -y_d, color='#3E2723', lw=2)
ax2.plot([0, 0], [-1.6, 1.6], color='#3E2723', lw=2)
ax2.fill_between(x_d, -y_d, y_d, color='#D7CCC8', alpha=0.45)

# Castelo de Proa
ax2.axvline(12.5, color='#5D4037', linestyle='--', lw=1)
ax2.text(13.8, 0, "Bico de Proa\n& Amarras", ha='center', va='center', fontsize=8, fontweight='bold')

# Mastro
ax2.scatter([mast_x], [0], s=130, color='#3E2723', zorder=5)

# Porão Central de Carga
ax2.fill_between([3.5, 11.0], [-1.5, -1.5], [1.5, 1.5], color='#BCAAA4', edgecolor='#4E342E', lw=1.5)
ax2.text(7.25, 0, "PORÃO CENTRAL DE CARGA\n(Capacidade histórica de 20 a 30 toneladas)\nEspaço aberto e estanque para transporte de mercadorias", ha='center', va='center', fontsize=8, fontweight='bold', color='#27160F')

# Praça de Popa / Acomodação Rústica da Tripulação
ax2.fill_between([1.2, 3.5], [-1.6, -1.6], [1.6, 1.6], color='#A1887F', edgecolor='#4E342E', lw=1.2)
ax2.text(2.35, 0, "Acomodação Tripulação\n(Pequena cozinha a carvão/beliche)", ha='center', va='center', fontsize=7.5, color='white', fontweight='bold')

# Timoneiro
ax2.text(0.6, 0, "Praça de\nGoverno", ha='center', va='center', fontsize=7.5, fontweight='bold')
ax2.plot([0.1, 1.2], [0, 0], color='black', lw=3)

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

plt.tight_layout()
plt.savefig('/home/magdalena/eee/alunos/luciano-mandu/similar_1_saveiro_balanganda.png', dpi=200)
plt.close()


# -----------------------------------------------------------------------------
# 2. CANOA DE TOLDA DO SÃO FRANCISCO (Exemplo: Luzitânia - 16,0 m)
# -----------------------------------------------------------------------------
fig2, (bx1, bx2) = plt.subplots(2, 1, figsize=(15, 10), dpi=180, gridspec_kw={'height_ratios': [1.3, 1]})
fig2.patch.set_facecolor('#FDFCF7')

bx1.set_facecolor('#F9F8F3')
bx1.set_title("2. CANOA DE TOLDA DO SÃO FRANCISCO (16,0 m) — Ex: Luzitânia\n[ VISTA DE PERFIL / ELEVAÇÃO LATERAL ]", fontsize=11, fontweight='bold', color='#1B5E20', pad=10)

bx1.axhline(0, color='#1E88E5', lw=1.5, linestyle='-', label='Linha d\'Água Rasa (T = 0,65 m)')
bx1.fill_between([-2, 18], -2, 0, color='#BBDEFB', alpha=0.35)

# Casco Canoa de Tolda (16m, fundo muito raso, proa longa)
x_luz = [0.0, 0.4, 1.5, 6.0, 11.0, 14.5, 16.0, 15.2, 12.0, 7.0, 1.5, 0.0]
z_luz = [0.75, -0.45, -0.65, -0.65, -0.60, -0.35, 1.15, 0.95, 0.70, 0.65, 0.65, 0.75]
casco_luz = patches.Polygon(list(zip(x_luz, z_luz)), closed=True, facecolor='#A1887F', edgecolor='#3E2723', lw=2, label='Casco Raso em Madeira (Sem Quilha Saliente)')
bx1.add_patch(casco_luz)

# A TOLDA (Cabine fechada em arco tradicional, posicionada de vante para meia-nau)
x_tolda = np.linspace(4.5, 13.5, 60)
z_tolda = 1.95 + 0.25 * np.sin(np.pi * (x_tolda - 4.5) / 9.0)
bx1.plot(x_tolda, z_tolda, color='#5D4037', lw=3.5, label='A Tolda (Estrutura em Arcos de Madeira / Craibeira)')
bx1.fill_between(x_tolda, 0.65, z_tolda, color='#D7CCC8', alpha=0.7)
bx1.text(9.0, 1.3, "A TOLDA\n(Abrigo de mantimentos, cozinha rústica e pernoite dos canoeiros)", ha='center', va='center', fontsize=8, fontweight='bold', color='#3E2723')

# Tábua de Bolina Lateral
bx1.plot([7.0, 8.5], [-0.3, -1.4], color='#2E7D32', lw=5, label='Tábua de Bolina Lateral (Orça em Rio Raso)')

# Mastro e Pano de Traquete / Vela Grande Tradicional
mast_x_luz = 3.5
mast_top_luz = 12.5
bx1.plot([mast_x_luz, mast_x_luz], [0.4, mast_top_luz], color='#4E342E', lw=4, label='Mastro de Pau d\'Arco')
bx1.plot([mast_x_luz, 11.5], [mast_top_luz - 0.5, 10.5], color='#5D4037', lw=2.5) # Carangueja
bx1.plot([mast_x_luz, 12.5], [1.1, 1.25], color='#5D4037', lw=3) # Retranca
sail_luz = patches.Polygon([(mast_x_luz, mast_top_luz - 0.5), (11.5, 10.5), (12.5, 1.25), (mast_x_luz, 1.1)], closed=True, facecolor='#FFF9C4', edgecolor='#BDBDBD', alpha=0.9, lw=1.5, label='Pano de Canoa de Tolda')
bx1.add_patch(sail_luz)

bx1.set_xlim(-1.5, 18.5)
bx1.set_ylim(-1.8, 13.5)
bx1.set_ylabel("Altura (m)", fontsize=9)
bx1.grid(True, linestyle=':', alpha=0.5)
bx1.legend(loc='upper right', fontsize=8, ncol=2)

# Planta
bx2.set_facecolor('#F9F8F3')
bx2.set_title("[ PLANTA BAIXA / ARRANJO GERAL DO CONVÉS ]", fontsize=10, fontweight='bold', color='#1B5E20')

x_ld = np.linspace(0, 16.0, 100)
y_ld = 1.95 * (1 - ((x_ld - 7.5)/8.5)**2)**0.5
y_ld = np.nan_to_num(y_ld)
y_ld = np.where(x_ld > 14.5, y_ld * (16.0 - x_ld)/1.5, y_ld)

bx2.plot(x_ld, y_ld, color='#3E2723', lw=2)
bx2.plot(x_ld, -y_ld, color='#3E2723', lw=2)
bx2.plot([0, 0], [-1.2, 1.2], color='#3E2723', lw=2)
bx2.fill_between(x_ld, -y_ld, y_ld, color='#EFEBE9', alpha=0.5)

# Bico de Proa e Rombo de Proa
bx2.text(15.2, 0, "Rombo de Proa\n(Madeira maciça)", ha='center', va='center', fontsize=7.5, fontweight='bold')

# A Tolda em Planta (X: 4.5 a 13.5)
bx2.fill_between([4.5, 13.5], [-1.75, -1.75], [1.75, 1.75], color='#D7CCC8', edgecolor='#5D4037', lw=1.5)
bx2.text(9.0, 0, "ESTRUTURA DA TOLDA (PROA E MEIA-NAU)\nÁrea protegida da chuva e sol do sertão\nGuarda de 200 a 250 sacos de mercadorias", ha='center', va='center', fontsize=8, fontweight='bold', color='#3E2723')

# Convés de Ré / Praça de Manobra
bx2.scatter([mast_x_luz], [0], s=120, color='#3E2723', zorder=5)
bx2.text(2.2, 0, "Praça de Ré / Manobra\n(Convés descoberto para governo e amarras)", ha='center', va='center', fontsize=7.5, fontweight='bold')
bx2.plot([0.2, 1.4], [0, 0], color='black', lw=3)

bx2.set_xlim(-1.5, 18.5)
bx2.set_ylim(-2.6, 2.6)
bx2.set_xlabel("Comprimento (metros)", fontsize=9)
bx2.set_ylabel("Meia-Boca (m)", fontsize=9)
bx2.grid(True, linestyle=':', alpha=0.5)

plt.tight_layout()
plt.savefig('/home/magdalena/eee/alunos/luciano-mandu/similar_2_canoa_tolda_luzitania.png', dpi=200)
plt.close()


# -----------------------------------------------------------------------------
# 3. BARCO REGIONAL DE TRANSPORTE MARAJOARA (Exemplo: Comandante Ágape - 16m a motor)
# -----------------------------------------------------------------------------
fig3, (cx1, cx2) = plt.subplots(2, 1, figsize=(15, 10), dpi=180, gridspec_kw={'height_ratios': [1.3, 1]})
fig3.patch.set_facecolor('#FDFCF7')

cx1.set_facecolor('#F9F8F3')
cx1.set_title("3. BARCO REGIONAL DE PASSAGEIROS MARAJOARA (16,0 m) — Ex: B/M Comandante Ágape\n[ VISTA DE PERFIL / ELEVAÇÃO LATERAL ]", fontsize=11, fontweight='bold', color='#0D47A1', pad=10)

cx1.axhline(0, color='#1E88E5', lw=1.5, linestyle='-', label='Linha d\'Água (T = 0,90 m)')
cx1.fill_between([-2, 18], -2, 0, color='#BBDEFB', alpha=0.35)

# Casco Regional Amazônico em Madeira (16m)
x_mar = [0.0, 0.4, 1.2, 6.0, 12.0, 15.0, 16.0, 15.2, 13.0, 7.0, 1.0, 0.0]
z_mar = [0.80, -0.60, -0.90, -0.90, -0.85, -0.40, 1.30, 1.10, 0.85, 0.80, 0.80, 0.80]
casco_mar = patches.Polygon(list(zip(x_mar, z_mar)), closed=True, facecolor='#0288D1', edgecolor='#01579B', lw=2, label='Casco em Madeira Naval Regional')
cx1.add_patch(casco_mar)

# Quilha e hélice de motor diesel de centro
cx1.plot([0.5, 1.2, 13.5, 15.0], [-0.9, -1.0, -0.9, -0.2], color='#01579B', lw=3.5)
cx1.scatter([0.8], [-0.7], s=90, color='darkgoldenrod', zorder=5, label='Hélice / Motor Diesel Centro (~90-120 HP)')

# Superestrutura Amazônica de 2 Pisos (Convés Principal + Tijupá / Comando Superior)
# Piso 1 (Convés Principal - Coberto por todo o comprimento: x=1.5 a 14.0)
piso1 = patches.Rectangle((1.5, 0.8), 12.5, 1.4, facecolor='#E1F5FE', edgecolor='#0288D1', lw=1.5)
cx1.add_patch(piso1)
cx1.text(7.5, 1.5, "CONVÉS PRINCIPAL DE PASSAGEIROS (Salão de Redes / Assentos Coletivos)", ha='center', va='center', fontsize=8, fontweight='bold', color='#01579B')

# Esteios / Janelas abertas amazônicas
for px in np.linspace(2.0, 13.0, 9):
    cx1.plot([px, px], [0.8, 2.2], color='#0288D1', lw=1.5)

# Piso 2 (Tijupá / Camarim de Comando na Proa: x=8.0 a 12.5)
tijupa = patches.Rectangle((7.5, 2.2), 5.0, 1.2, facecolor='#B3E5FC', edgecolor='#01579B', lw=1.5)
cx1.add_patch(tijupa)
cx1.text(10.0, 2.8, "Comando / Tijupá\n(Cabine do Comandante)", ha='center', va='center', fontsize=7.5, fontweight='bold', color='#01579B')

# Mastro de sinais / Luzes de navegação
cx1.plot([10.0, 10.0], [3.4, 5.0], color='#37474F', lw=2)
cx1.plot([9.2, 10.8], [4.5, 4.5], color='#37474F', lw=1.5)

# Sanitário e Cozinha na Popa (Piso 1)
cx1.text(2.5, 1.5, "[ Cozinha / San. ]", ha='center', va='center', fontsize=7, fontweight='bold', color='#D84315')

cx1.set_xlim(-1.5, 18.5)
cx1.set_ylim(-1.6, 6.0)
cx1.set_ylabel("Altura (m)", fontsize=9)
cx1.grid(True, linestyle=':', alpha=0.5)
cx1.legend(loc='upper right', fontsize=8, ncol=2)

# Planta (Convés Principal)
cx2.set_facecolor('#F9F8F3')
cx2.set_title("[ PLANTA BAIXA / ARRANJO DO CONVÉS PRINCIPAL ]", fontsize=10, fontweight='bold', color='#0D47A1')

x_md = np.linspace(0, 16.0, 100)
y_md = 2.10 * (1 - ((x_md - 7.5)/8.5)**2)**0.5
y_md = np.nan_to_num(y_md)
y_md = np.where(x_md > 14.5, y_md * (16.0 - x_md)/1.5, y_md)

cx2.plot(x_md, y_md, color='#01579B', lw=2)
cx2.plot(x_md, -y_md, color='#01579B', lw=2)
cx2.plot([0, 0], [-1.5, 1.5], color='#01579B', lw=2)
cx2.fill_between(x_md, -y_md, y_md, color='#E1F5FE', alpha=0.5)

# Proa Aberta
cx2.text(15.2, 0, "Bico de Proa\n(Atracação)", ha='center', va='center', fontsize=7.5, fontweight='bold')

# Salão de Passageiros (Redes e Bancos: x=4.0 a 13.5)
cx2.fill_between([4.0, 13.5], [-1.9, -1.9], [1.9, 1.9], color='#B3E5FC', edgecolor='#0288D1', lw=1.2)
cx2.text(8.75, 0, "SALÃO DE PASSAGEIROS REGIONAL\n- Ganchos para 30 a 50 redes de passageiros\n- Bancos laterais corridos\n- Carga estivada sob o piso", ha='center', va='center', fontsize=8, fontweight='bold', color='#01579B')

# Módulos de Serviço na Popa (Cozinha e Banheiro)
wc_m = patches.Rectangle((1.2, 0.2), 2.2, 1.5, facecolor='#FFCCBC', edgecolor='#D84315', lw=1.2)
cx2.add_patch(wc_m)
cx2.text(2.3, 0.95, "BANHEIRO", ha='center', va='center', fontsize=7.5, fontweight='bold')

coz_m = patches.Rectangle((1.2, -1.7), 2.2, 1.5, facecolor='#FFE0B2', edgecolor='#E65100', lw=1.2)
cx2.add_patch(coz_m)
cx2.text(2.3, -0.95, "COZINHA", ha='center', va='center', fontsize=7.5, fontweight='bold')

# Praça de Máquinas (sob o piso central/popa)
cx2.text(2.3, 0, "Motor Diesel\n(Sob piso)", ha='center', va='center', fontsize=7, fontweight='bold')

cx2.set_xlim(-1.5, 18.5)
cx2.set_ylim(-2.6, 2.6)
cx2.set_xlabel("Comprimento (metros)", fontsize=9)
cx2.set_ylabel("Meia-Boca (m)", fontsize=9)
cx2.grid(True, linestyle=':', alpha=0.5)

plt.tight_layout()
plt.savefig('/home/magdalena/eee/alunos/luciano-mandu/similar_3_barco_marajoara_agape.png', dpi=200)
plt.close()

print("3 imagens técnicas de arranjo dos similares geradas com sucesso.")
