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

plt.style.use('dark_background')
fig, (ax_perfil, ax_planta) = plt.subplots(2, 1, figsize=(14, 9), dpi=200, sharex=True)
fig.patch.set_facecolor('#333333')

x_casco = np.linspace(0, 14.80, 200)
z_quilha = 0.05 + 0.70 * ((x_casco - 7.4) / 7.4)**2
z_conves = 1.60 + 0.35 * ((x_casco - 7.4) / 7.4)**2

# -------------------------------------------------------------
# 1. VISTA DE PERFIL
# -------------------------------------------------------------
ax_perfil.set_facecolor('#404040')

# Casco
ax_perfil.fill_between(x_casco, z_quilha, z_conves, color='#8A5A36', alpha=0.5, label='Casco em Madeira (LOA 14,80 m)')
ax_perfil.plot(x_casco, z_conves, color='#FFFFFF', linewidth=1.5)
ax_perfil.plot(x_casco, z_quilha, color='#5C3A21', linewidth=2.0)

# Casaria na Popa (X: 0,80 a 4,60 m)
ax_perfil.fill([0.80, 4.60, 4.60, 0.80], [1.80, 1.68, 3.08, 3.20], color='#D4AF37', alpha=0.3, edgecolor='#FBB12F', label='Casaria na Popa')

# Mastro (X = 10,80 m)
ax_perfil.plot([10.80, 10.80], [0.10, 16.50], color='#E8E8E8', linewidth=3.5, label='Mastro de Içar')
# Retranca
ax_perfil.plot([10.80, 0.20], [2.20, 3.55], color='#FBB12F', linewidth=2.0, linestyle=':')

# Pau de Carga (Posição 1: NAVEGAÇÃO - Arriado em Berço no Trincaniz de BE)
# De X = 4,90 m até X = 10,30 m (Lança = 5,50 m)
ax_perfil.plot([4.90, 10.30], [1.85, 1.85], color='#00FFCC', linewidth=4.0, zorder=5, label='Pau de Carga NAVEGAÇÃO (Arriado no berço, Z=1,85m)')
ax_perfil.scatter([4.90], [1.85], color='#FF6B6B', s=140, zorder=6) # Pé de carneiro / base giratória

# Pau de Carga (Posição 2: OPERAÇÃO NO PORTO - Içado a 45°)
x_oper = [4.90, 4.90 + 5.50 * np.cos(np.radians(45))]
z_oper = [1.85, 1.85 + 5.50 * np.sin(np.radians(45))]
ax_perfil.plot(x_oper, z_oper, color='#FF6B6B', linewidth=3.0, linestyle='--', zorder=5, label='Pau de Carga OPERAÇÃO (Içado a 45° no porto)')
# Cabo de sustentação (amilho) e carga de 1,5t pendurada
ax_perfil.plot([x_oper[1], x_oper[1]], [z_oper[1], z_oper[1] - 3.2], color='#E8E8E8', linewidth=1.5, linestyle=':')
ax_perfil.scatter([x_oper[1]], [z_oper[1] - 3.2], color='#FEFCBF', s=160, marker='s', zorder=6)
ax_perfil.text(x_oper[1] + 0.25, z_oper[1] - 3.2, 'Lingada de Cana\n(1.500 kg)', color='#FEFCBF', fontsize=8, fontweight='bold')

# Guincho elétrico no pé da lança (X=4,90m, Z=1,80m)
ax_perfil.add_patch(patches.Rectangle((4.65, 1.68), 0.50, 0.40, facecolor='#4A90E2', edgecolor='#FFFFFF', linewidth=1, zorder=6))
ax_perfil.text(4.90, 1.45, 'Guincho 3,5 kW', color='#4A90E2', fontsize=7.5, ha='center', fontweight='bold')

# Anotações
ax_perfil.annotate('Pedestal Giratório / Pé da Lança\n(X=4,90 m no Trincaniz de BE)', xy=(4.90, 1.85), xytext=(3.20, 2.45),
                   arrowprops=dict(facecolor='#FF6B6B', shrink=0.08, width=1.2, headwidth=5),
                   color='#FF6B6B', fontsize=8.5, fontweight='bold')

ax_perfil.annotate('Curso 100% livre da Retranca (Z=3,55 m)\nSem qualquer interferência com a vela', xy=(6.50, 3.0), xytext=(6.50, 4.5),
                   arrowprops=dict(facecolor='#FBB12F', shrink=0.08, width=1.2, headwidth=5),
                   color='#FBB12F', fontsize=8.5, fontweight='bold')

ax_perfil.set_title('1. VISTA DE PERFIL: Cinemática do Pau de Carga (Posição de Navegação vs. Operação no Cais)', color='#FFFFFF', fontsize=11, fontweight='bold', pad=8)
ax_perfil.set_ylabel('Altura - Z (m)', color='#E8E8E8', fontsize=9)
ax_perfil.set_ylim(-0.2, 17.5)
ax_perfil.grid(True, linestyle='--', alpha=0.25, color='#888888')
ax_perfil.legend(loc='upper right', fontsize=8, facecolor='#2E2E2E', edgecolor='#555555')

# -------------------------------------------------------------
# 2. VISTA DE PLANTA
# -------------------------------------------------------------
ax_planta.set_facecolor('#404040')

y_borda = 2.45 * np.sin(np.pi * x_casco / 14.80)**0.45
ax_planta.fill_between(x_casco, -y_borda, y_borda, color='#8A5A36', alpha=0.5, label='Casco (BOA 4,90 m)')
ax_planta.plot(x_casco, y_borda, color='#FFFFFF', linewidth=1.2)
ax_planta.plot(x_casco, -y_borda, color='#FFFFFF', linewidth=1.2)

# Casaria
ax_planta.fill([0.80, 4.60, 4.60, 0.80], [-1.55, -1.70, 1.70, 1.55], color='#D4AF37', alpha=0.3, edgecolor='#FBB12F', label='Casaria de Popa')

# Pau de Carga na Planta (Boreste - Y = +1,95 m a +2,15 m)
# Posição 1: Deitado na borda de BE (X: 4,90 a 10,30 m, Y = +2,05 m)
ax_planta.plot([4.90, 10.30], [2.05, 2.05], color='#00FFCC', linewidth=4.0, zorder=5, label='Lança Arriada no Trincaniz de BE (Navegação)')
ax_planta.scatter([4.90], [2.05], color='#FF6B6B', s=160, zorder=6) # Base

# Posição 2: Aberto para fora para o cais (Giro de até 90° a Boreste)
ang_planta = np.radians(65)
x_p_cais = [4.90, 4.90 + 5.50 * np.cos(ang_planta)]
y_p_cais = [2.05, 2.05 + 5.50 * np.sin(ang_planta)]
ax_planta.plot(x_p_cais, y_p_cais, color='#FF6B6B', linewidth=3.0, linestyle='--', zorder=5, label='Lança Girada para o Cais (Alcance: 4,5 m além do bordo)')
ax_planta.scatter([x_p_cais[1]], [y_p_cais[1]], color='#FEFCBF', s=180, marker='s', zorder=6)
ax_planta.text(x_p_cais[1] + 0.2, y_p_cais[1], 'Descarga no Cais\n(São Joaquim / Caboto)', color='#FEFCBF', fontsize=8, fontweight='bold')

# Raio de giro do pau de carga
arc = patches.Arc((4.90, 2.05), 11.0, 11.0, angle=0, theta1=0, theta2=90, color='#00FFCC', linestyle=':', linewidth=1.5)
ax_planta.add_patch(arc)
ax_planta.text(8.0, 4.5, 'Raio de Giro: 5,5 m (Alcance Cais)', color='#00FFCC', fontsize=8, fontweight='bold')

# Praça de carga livre central
ax_planta.add_patch(patches.Rectangle((4.60, -1.80), 6.20, 3.60, facecolor='#9BD79B', alpha=0.2, edgecolor='#9BD79B', hatch='//'))
ax_planta.text(7.70, 0.0, 'PORÃO E CONVÉS DE CARGA (15 t)\nTotalmente desimpedido', color='#9BD79B', fontweight='bold', fontsize=9.5, ha='center', va='center')

# Mastro
ax_planta.scatter([10.80], [0.0], color='#FFFFFF', s=160, zorder=6)
ax_planta.text(10.80, -0.6, 'Mastro (X=10,80m)', color='#FFFFFF', fontsize=8, ha='center')

ax_planta.set_title('2. VISTA DE PLANTA: Base no Trincaniz de BE, Berço Longitudinal e Raio de Alcance no Cais', color='#FFFFFF', fontsize=11, fontweight='bold', pad=8)
ax_planta.set_xlabel('Posição Longitudinal ao longo do Casco - X (metros)', color='#E8E8E8', fontsize=9.5)
ax_planta.set_ylabel('Meia-Boca - Y (m)', color='#E8E8E8', fontsize=9)
ax_planta.set_ylim(-3.0, 7.5)
ax_planta.set_xlim(-0.8, 15.5)
ax_planta.grid(True, linestyle='--', alpha=0.25, color='#888888')
ax_planta.legend(loc='upper right', fontsize=8, facecolor='#2E2E2E', edgecolor='#555555')

plt.suptitle('BRANA / ESTALEIRO ESCOLA EMBRIÃO — DIMENSIONAMENTO DO PAU DE CARGA (GUINCHO DO CAPATAZ)\nCapacidade de Içamento: 1.500 kg (SWL) | Lança: 5,50 m | Massa Total do Sistema: ~300 kg', 
             color='#EE9A98', fontsize=12.5, fontweight='bold', y=0.985)

plt.tight_layout(rect=[0, 0.02, 1, 0.95])

out_air = '/home/magdalena/eee/alunos/air/arranjo_e_cinematica_pau_de_carga.png'
out_g3 = '/home/magdalena/eee/grupos/grupo-3/arranjo_e_cinematica_pau_de_carga.png'

plt.savefig(out_air, facecolor=fig.get_facecolor(), edgecolor='none', dpi=200)
plt.savefig(out_g3, facecolor=fig.get_facecolor(), edgecolor='none', dpi=200)
print('Gráfico do pau de carga gerado com sucesso!')
