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

# Configurar estilo arquitetura naval / prancha técnica
plt.style.use('default')
fig = plt.figure(figsize=(18, 12), dpi=300)
fig.patch.set_facecolor('#FFFFFF')

# Grid de visualização: 3 vistas principais (Perfil/Elevação, Planta/Convés, Seções/Balizas)
gs = fig.add_gridspec(3, 2, height_ratios=[1.2, 1.0, 1.0], width_ratios=[1.3, 0.7], hspace=0.35, wspace=0.25)

ax_profile = fig.add_subplot(gs[0, :])     # Vista Lateral / Perfil com Mastração
ax_plan = fig.add_subplot(gs[1, :])        # Vista Superior / Arranjo de Convés
ax_section = fig.add_subplot(gs[2, 0])     # Seção Mestra / Transversal (Frontal)
ax_lines = fig.add_subplot(gs[2, 1])       # Plano de Balizas Preliminar (Body Plan)

# Paleta de cores naval
c_hull = '#0F3E6D'
c_deck = '#4A5568'
c_wl = '#0080FF'
c_rig = '#2D3748'
c_sail = '#ED8936'
c_dim = '#C53030'
c_grid = '#E2E8F0'

# ==========================================
# 1. VISTA DE PERFIL (PROFILE & RIGGING PLAN)
# ==========================================
ax_profile.set_title("VISTA LATERAL / ELEVAÇÃO E PLANO VÉLICO (SLOOP 7/8 - 85 m²)", fontsize=11, fontweight='bold', color=c_hull, pad=10, loc='left')

# Linha d'água (WL = 0.0)
ax_profile.axhline(0, color=c_wl, linestyle='--', linewidth=1.2, label="Linha d'Água Projetada (DWL)")

# Casco (LOA: 0 a 12.8 m, WL de 0.3 a 12.5 m)
# Perfil do fundo e costado
hull_x = [0.0, 0.4, 3.0, 6.0, 9.0, 12.2, 12.8, 12.5, 6.0, 0.0]
hull_y = [0.8, -0.45, -0.45, -0.45, -0.40, 0.0, 1.25, 1.25, 1.15, 0.8]
ax_profile.plot(hull_x, hull_y, color=c_hull, linewidth=2.0)
ax_profile.fill(hull_x, hull_y, color='#EBF8FF', alpha=0.5)

# Quilha Rasa Fixa (LAR Keel)
keel_x = [4.5, 5.2, 7.2, 7.8]
keel_y = [-0.45, -1.0, -1.0, -0.45]
ax_profile.plot(keel_x, keel_y, color=c_hull, linewidth=2.0)
ax_profile.fill(keel_x, keel_y, color='#CBD5E0')
ax_profile.text(6.0, -0.75, "Quilha LAR (Calado 1.00m)", ha='center', va='center', fontsize=7.5, color='#2D3748', fontweight='bold')

# Leme de Popa
rudder_x = [0.6, 0.7, 1.1, 1.0]
rudder_y = [-0.3, -0.9, -0.9, -0.3]
ax_profile.plot(rudder_x, rudder_y, color='#4A5568', linewidth=1.5)
ax_profile.fill(rudder_x, rudder_y, color='#A0AEC0')

# Casaria Central (Coachroof / Salão)
coach_x = [2.2, 2.2, 4.0, 8.5, 8.8, 8.8]
coach_y = [1.15, 2.15, 2.30, 2.10, 1.20, 1.15]
ax_profile.plot(coach_x, coach_y, color=c_deck, linewidth=1.8)
ax_profile.fill(coach_x, coach_y, color='#EDF2F7')
# Janelas da casaria
window = patches.Polygon([[4.2, 1.5], [8.2, 1.5], [8.0, 1.95], [4.4, 2.05]], closed=True, facecolor='#63B3ED', edgecolor='#2B6CB0', alpha=0.8)
ax_profile.add_patch(window)

# Mastração
m_pos = 6.8  # Posição do mastro
m_top = 16.2 # Altura do mastro
ax_profile.plot([m_pos, m_pos], [2.2, m_top], color=c_rig, linewidth=3.0) # Mastro
ax_profile.plot([m_pos, 1.8], [2.6, 2.4], color=c_rig, linewidth=2.5)       # Retranca (Boom)

# Estais (Rigging)
ax_profile.plot([m_pos, 12.2], [m_top * 0.88, 1.25], color='#718096', linewidth=1.2, linestyle=':') # Estai de Proa (7/8)
ax_profile.plot([m_pos, 0.4], [m_top, 0.9], color='#718096', linewidth=1.2, linestyle=':')          # Estai de Popa / Brandais

# Velas (Esboço translúcido)
# Grande (Mestra)
main_sail = patches.Polygon([[m_pos, 2.6], [1.8, 2.4], [m_pos - 0.6, m_top], [m_pos, m_top]], closed=True, facecolor='#FEEBC8', edgecolor='#DD6B20', alpha=0.5, linewidth=1.5)
ax_profile.add_patch(main_sail)
ax_profile.text(4.2, 7.5, "Vela Mestra\n52 m²", ha='center', fontsize=9, fontweight='bold', color='#C05621')

# Buja
jib_sail = patches.Polygon([[m_pos - 0.1, 2.5], [12.0, 1.3], [m_pos, m_top * 0.86]], closed=True, facecolor='#EBF8FF', edgecolor='#3182CE', alpha=0.5, linewidth=1.5)
ax_profile.add_patch(jib_sail)
ax_profile.text(9.0, 6.0, "Buja Autovirante\n33 m²", ha='center', fontsize=8.5, fontweight='bold', color='#2B6CB0')

# Cotas e Anotações
ax_profile.annotate('', xy=(0, -1.3), xytext=(12.8, -1.3), arrowprops=dict(arrowstyle='<->', color=c_dim, lw=1))
ax_profile.text(6.4, -1.5, "LOA = 12,80 m (42,0 ft)", ha='center', va='center', fontsize=8.5, color=c_dim, fontweight='bold')

ax_profile.set_xlim(-1, 14)
ax_profile.set_ylim(-2.0, 17.5)
ax_profile.set_aspect('equal')
ax_profile.axis('off')

# ==========================================
# 2. VISTA DE PLANTA (DECK & ACCOMMODATION PLAN)
# ==========================================
ax_plan.set_title("ARRANJO GERAL DE CONVÉS E ACOMODAÇÕES (10 PESSOAS)", fontsize=11, fontweight='bold', color=c_hull, pad=10, loc='left')

# Eixo de simetria (CL)
ax_plan.axhline(0, color='#A0AEC0', linestyle='-.', linewidth=0.8)

# Casco Boreste (y > 0) e Bombordo (y < 0)
# Centro de cada casco: y = +2.8m e y = -2.8m (BOA = 6.9m -> meio a meio 3.45m)
y_bb = -2.8
y_be = 2.8
bw = 0.65 # semi-boca

for y_c in [y_bb, y_be]:
    # Contorno do casco
    hx = [0, 0.4, 3, 6, 9, 12, 12.8, 12, 9, 6, 3, 0.4, 0]
    hy = [y_c - bw*0.8, y_c - bw, y_c - bw, y_c - bw, y_c - bw*0.9, y_c - bw*0.5, y_c, y_c + bw*0.5, y_c + bw*0.9, y_c + bw, y_c + bw, y_c + bw, y_c - bw*0.8]
    ax_plan.plot(hx, hy, color=c_hull, linewidth=1.8)
    ax_plan.fill(hx, hy, color='#EDF2F7')
    
    # Cabines (Popa e Vante)
    # Cabine Popa
    ax_plan.add_patch(patches.Rectangle((0.8, y_c - 0.5), 1.9, 1.0, facecolor='#CBD5E0', edgecolor='#718096', lw=1))
    ax_plan.text(1.75, y_c, "Cama Casal", ha='center', va='center', fontsize=7, color='#2D3748')
    # Cabine Vante
    ax_plan.add_patch(patches.Rectangle((7.5, y_c - 0.45), 1.9, 0.9, facecolor='#CBD5E0', edgecolor='#718096', lw=1))
    ax_plan.text(8.45, y_c, "Cama Casal", ha='center', va='center', fontsize=7, color='#2D3748')
    # Banheiro Meio
    ax_plan.add_patch(patches.Rectangle((4.5, y_c - 0.5), 1.6, 1.0, facecolor='#E2E8F0', edgecolor='#A0AEC0', lw=1))
    ax_plan.text(5.3, y_c, "WC / Ducha", ha='center', va='center', fontsize=6.5, color='#4A5568')

# Ponte de Ligação e Salão Central
bridge = patches.Rectangle((2.0, -2.15), 6.8, 4.3, facecolor='#F7FAFC', edgecolor=c_hull, linewidth=1.5)
ax_plan.add_patch(bridge)

# Salão / Dinete interna
ax_plan.add_patch(patches.Rectangle((4.2, -1.8), 3.0, 3.6, facecolor='#FEFCBF', edgecolor='#D69E2E', lw=1.2))
ax_plan.text(5.7, 0.0, "Salão / Dinete Conversível\n(Mesa + Sofá em U - 10 Pax)", ha='center', va='center', fontsize=8, fontweight='bold', color='#744210')

# Cockpit Externo
ax_plan.add_patch(patches.Rectangle((2.1, -1.9), 2.0, 3.8, facecolor='#E2E8F0', edgecolor='#718096', lw=1))
ax_plan.text(3.1, 0.0, "Cockpit Coberto\n(Mesa Externa)", ha='center', va='center', fontsize=7.5, color='#2D3748')

# Trampolim de Proa (Rede)
trampolim = patches.Rectangle((9.0, -2.15), 3.0, 4.3, facecolor='#EBF8FF', edgecolor='#3182CE', linestyle=':', lw=1.5)
ax_plan.add_patch(trampolim)
ax_plan.text(10.5, 0.0, "Trampolim / Solário de Proa\n(~18 m² de tela reforçada)", ha='center', va='center', fontsize=8, color='#2B6CB0', fontweight='bold')

# Cotas de Largura
ax_plan.annotate('', xy=(-0.6, -3.45), xytext=(-0.6, 3.45), arrowprops=dict(arrowstyle='<->', color=c_dim, lw=1))
ax_plan.text(-1.0, 0, "BOA = 6,90 m", ha='center', va='center', rotation=90, fontsize=8.5, color=c_dim, fontweight='bold')

ax_plan.set_xlim(-1.8, 14)
ax_plan.set_ylim(-4.2, 4.2)
ax_plan.set_aspect('equal')
ax_plan.axis('off')

# ==========================================
# 3. SEÇÃO MESTRA TRANSVERSAL (MIDSHIP SECTION)
# ==========================================
ax_section.set_title("SEÇÃO TRANSVERSAL / MESTRA (QUINAS DUPLAS)", fontsize=10, fontweight='bold', color=c_hull, pad=8, loc='left')

# Linha d'água
ax_section.axhline(0, color=c_wl, linestyle='--', linewidth=1.0)
ax_section.text(4.0, 0.1, "DWL", color=c_wl, fontsize=7.5, fontweight='bold')

# Desenhar os dois cascos em quina
for sign in [-1, 1]:
    cx = sign * 2.8
    # Casco quina dupla (fundo em V, quina inferior, quina superior flare)
    sec_x = [cx, cx - 0.25, cx - 0.62, cx - 0.80, cx + 0.80, cx + 0.62, cx + 0.25, cx]
    sec_y = [-0.45, -0.40, 0.10, 1.20, 1.20, 0.10, -0.40, -0.45]
    ax_section.plot(sec_x, sec_y, color=c_hull, linewidth=1.8)
    ax_section.fill(sec_x, sec_y, color='#EDF2F7')
    
    # Quilha LAR sob cada casco
    kx = [cx - 0.08, cx - 0.05, cx + 0.05, cx + 0.08]
    ky = [-0.45, -1.0, -1.0, -0.45]
    ax_section.plot(kx, ky, color=c_hull, linewidth=1.5)
    ax_section.fill(kx, ky, color='#CBD5E0')

# Ponte Central e Casaria
bridge_sec_x = [-2.0, -2.0, 2.0, 2.0]
bridge_sec_y = [1.2, 0.78, 0.78, 1.2]
ax_section.plot(bridge_sec_x, bridge_sec_y, color=c_hull, linewidth=1.8)

roof_x = [-2.2, -2.2, -1.8, 1.8, 2.2, 2.2]
roof_y = [1.2, 1.4, 2.2, 2.2, 1.4, 1.2]
ax_section.plot(roof_x, roof_y, color=c_deck, linewidth=1.8)
ax_section.fill(roof_x, roof_y, color='#FEFCBF', alpha=0.4)

# Cota Vão Livre (Bridgedeck Clearance)
ax_section.annotate('', xy=(0, 0), xytext=(0, 0.78), arrowprops=dict(arrowstyle='<->', color=c_dim, lw=1))
ax_section.text(0.15, 0.39, "Vão = 0,78 m", fontsize=7.5, color=c_dim, fontweight='bold')

# Cota Boca Casco
ax_section.annotate('', xy=(2.8 - 0.62, -0.05), xytext=(2.8 + 0.62, -0.05), arrowprops=dict(arrowstyle='<->', color='#2B6CB0', lw=0.8))
ax_section.text(2.8, -0.22, "b_wl = 1,25 m", ha='center', fontsize=7, color='#2B6CB0', fontweight='bold')

ax_section.set_xlim(-4.2, 4.2)
ax_section.set_ylim(-1.3, 2.5)
ax_section.set_aspect('equal')
ax_section.axis('off')

# ==========================================
# 4. PLANO DE BALIZAS (BODY PLAN PRELIMINAR)
# ==========================================
ax_lines.set_title("PLANO DE BALIZAS (MEIO-CASCO)", fontsize=10, fontweight='bold', color=c_hull, pad=8, loc='left')

ax_lines.axhline(0, color=c_wl, linestyle='--', linewidth=1.0)
ax_lines.axvline(0, color='#718096', linestyle='-', linewidth=0.8) # Linha de Centro do casco

# Balizas de Vante (Lado Direito)
for i, factor in enumerate([0.2, 0.45, 0.7, 0.9, 1.0]):
    bx = np.array([0, 0.2*factor, 0.62*factor, 0.8*factor])
    by = np.array([-0.45*factor, -0.4*factor, 0.1*factor, 1.2])
    ax_lines.plot(bx, by, color='#2B6CB0', linewidth=1.2, label='Vante' if i==0 else "")

# Balizas de Ré (Lado Esquerdo)
for i, factor in enumerate([0.98, 0.92, 0.85, 0.75]):
    bx = np.array([0, -0.25*factor, -0.62*factor, -0.78*factor])
    by = np.array([-0.45*factor, -0.42*factor, 0.1*factor, 1.2])
    ax_lines.plot(bx, by, color='#C53030', linewidth=1.2, linestyle='--', label='Ré' if i==0 else "")

ax_lines.text(0.4, -0.3, "Proa (Vante)", color='#2B6CB0', fontsize=7.5, fontweight='bold')
ax_lines.text(-0.65, -0.3, "Popa (Ré)", color='#C53030', fontsize=7.5, fontweight='bold')

ax_lines.set_xlim(-1.1, 1.1)
ax_lines.set_ylim(-0.7, 1.4)
ax_lines.set_aspect('equal')
ax_lines.axis('off')

# Selo Técnico de Engenharia Naval (Inferior Direito)
stamp_text = (
    "BRANA ESCOLA DE ENGENHARIA NAVAL | EEE SALVADOR\n"
    "PROJETO: CATAMARÃ 42' TURISMO & ESPORTE (BTS)\n"
    "ALUNO / PROJETISTA: ALLAN BRAGA\n"
    "ORIENTAÇÃO: MAGDALENA (MADA), D.Sc.\n"
    "DESENHO: PRANCHA 01/01 — ARRANJO GERAL E LINHAS"
)
fig.text(0.92, 0.04, stamp_text, fontsize=7.5, fontfamily='monospace',
         bbox=dict(boxstyle='square,pad=0.6', facecolor='#F7FAFC', edgecolor=c_hull, lw=1.2),
         ha='right', va='bottom', color='#1A202C')

out_path = '/home/magdalena/eee/alunos/allan-braga/Desenho_Tecnico_Catamara_42.png'
plt.savefig(out_path, dpi=300, bbox_inches='tight')
plt.close()
print(f"Desenho técnico salvo em: {out_path}")
