import customtkinter as ctk

class HelpFrame(ctk.CTkFrame):
    def __init__(self, master, heading_font=None, text_font=None):
        super().__init__(master)
        self.heading_font = heading_font if heading_font else ctk.CTkFont(size=18, weight="bold")
        self.text_font = text_font if text_font else ctk.CTkFont(size=12)

        self.grid_columnconfigure(0, weight=1)
        self.grid_rowconfigure(1, weight=1)
        
        title = ctk.CTkLabel(self, text="Sección de Ayuda y Documentación", font=self.heading_font)
        title.grid(row=0, column=0, padx=20, pady=(20, 10), sticky="ew")

        self.help_scroll_frame = ctk.CTkScrollableFrame(self)
        self.help_scroll_frame.grid(row=1, column=0, padx=20, pady=10, sticky="nsew")
        self.help_scroll_frame.grid_columnconfigure(0, weight=1)

        self._add_help_content()

    def _add_help_content(self):
        # Introducción
        self._add_section_header("Bienvenido a la Sección de Ayuda de Cyber-Godfather", level=0)
        self._add_text("Aquí encontrarás información detallada sobre cada una de las herramientas integradas y cómo utilizarlas.")

        # OSINT
        self._add_section_header("1. Herramientas OSINT (Inteligencia de Fuentes Abiertas)", level=1)
        self._add_tool_help("theHarvester", "Recopila subdominios, direcciones de correo electrónico, hosts, nombres de empleados, banners de Open Port y más utilizando diversas fuentes públicas. Útil para la fase de reconocimiento.")
        self._add_tool_help("Sherlock", "Busca nombres de usuario en más de 300 redes sociales para ayudar a correlacionar identidades en línea.")
        self._add_tool_help("Metagoofil", "Extrae metadatos de documentos públicos (pdf, doc, xls, ppt, docx, pptx, xlsx) disponibles en servidores objetivo para descubrir información sensible como nombres de usuario, nombres de máquinas, rutas, etc.")

        # Hacking Web
        self._add_section_header("2. Herramientas de Hacking Web", level=1)
        self._add_tool_help("Nikto", "Escáner de vulnerabilidades de servidores web. Realiza pruebas completas contra servidores web para múltiples elementos, incluyendo más de 6700 archivos/programas potencialmente peligrosos, verifica versiones de servidores obsoletas y problemas específicos de versiones en más de 1250 servidores.")
        self._add_tool_help("Gobuster", "Herramienta para fuerza bruta de directorios/archivos, subdominios DNS, nombres de hosts virtuales en servidores web y buckets S3 abiertos.")
        self._add_tool_help("SQLMap", "Herramienta de prueba de penetración que automatiza el proceso de detección y explotación de fallos de inyección SQL y toma de control de servidores de bases de datos.")

        # Red
        self._add_section_header("3. Herramientas de Red", level=1)
        self._add_tool_help("Nmap (Network Mapper)", "Utilidad gratuita y de código abierto para el descubrimiento de redes y auditoría de seguridad. Los administradores de sistemas la utilizan para auditorías de seguridad, mapeo de puertos y gestión de inventario de redes.")

        # Explotación y Cracking
        self._add_section_header("4. Herramientas de Explotación y Cracking", level=1)
        self._add_tool_help("Msfvenom Payload", "Genera payloads maliciosos que pueden ser utilizados para obtener acceso remoto a sistemas. Permite configurar el tipo de payload (shell inversa, meterpreter, etc.), LHOST, LPORT y el formato de salida.")
        self._add_tool_help("Msfconsole Listener", "Configura un handler en Metasploit Framework para escuchar las conexiones inversas de los payloads generados con Msfvenom. Requiere LHOST, LPORT y el mismo payload que el generado.")
        self._add_tool_help("John The Ripper", "Herramienta de cracking de contraseñas rápida. Utiliza ataques de diccionario y de fuerza bruta para descubrir contraseñas débiles, a menudo a partir de hashes capturados.")
        self._add_tool_help("Hydra", "Potente herramienta de cracking de contraseñas en línea para diversos protocolos. Ideal para ataques de fuerza bruta o diccionario contra servicios como SSH, FTP, HTTP, SMB, RDP, entre otros.")

        # Forense
        self._add_section_header("5. Herramientas Forenses", level=1)
        self._add_tool_help("ExifTool", "Una librería Perl de código abierto y una aplicación de línea de comandos para leer, escribir y editar meta información en una amplia variedad de formatos de archivos. Útil para analizar imágenes, vídeos y documentos.")
        self._add_tool_help("Strings", "Imprime las cadenas de caracteres imprimibles (secuencias de cuatro o más caracteres imprimibles) en archivos binarios o de otro tipo. Útil para descubrir texto incrustado, URL o configuraciones en ejecutables.")
        self._add_tool_help("Binwalk", "Una herramienta para analizar, ingeniería inversa y extraer imágenes de firmware. Puede detectar firmas conocidas de archivos binarios y sistemas de archivos incrustados.")

        # Hacking Wi-Fi
        self._add_section_header("6. Herramientas de Hacking Wi-Fi", level=1)
        self._add_tool_help("Airmon-ng", "Utilidad para habilitar el modo monitor en interfaces inalámbricas, necesario para la captura de tráfico y ataques a redes Wi-Fi.")
        self._add_tool_help("Airodump-ng", "Capturador de paquetes de redes inalámbricas que muestra información sobre puntos de acceso y clientes. Se usa para recopilar datos para cracking de contraseñas WEP/WPA.")
        self._add_tool_help("Aireplay-ng", "Inyecta y reproduce paquetes, útil para generar tráfico, realizar ataques de desautenticación, autenticación falsa y otros ataques contra redes Wi-Fi.")
        self._add_tool_help("Aircrack-ng", "Herramienta para crackear claves WEP y WPA/WPA2-PSK utilizando un archivo de captura y, opcionalmente, una wordlist.")

        # Utilidades Propias
        self._add_section_header("7. Utilidades Propias de Cyber-Godfather", level=1)
        self._add_tool_help("Codificador/Hasheador", "Herramienta para codificar y decodificar texto en Base64 y generar hashes MD5, SHA1 y SHA256.")
        self._add_tool_help("Extractor de Enlaces", "Extrae todos los enlaces (URLs) de una página web dada. Útil para reconocimiento web.")
        self._add_tool_help("Verificador de Puertos", "Realiza un escaneo de puertos básico en una IP/dominio y puerto específico para verificar si está abierto.")

        # Anonimato
        self._add_section_header("8. Capa de Anonimato (Tor)", level=1)
        self._add_tool_help("Estado de Tor", "Permite verificar si el servicio Tor está activo en tu sistema y, si es posible, muestra la IP externa que estás utilizando a través de Tor.")
        self._add_tool_help("Torsocks/Proxychains", "Facilita la ejecución de cualquier comando a través de la red Tor, utilizando 'torsocks' o 'proxychains', para ocultar tu dirección IP de origen.")


    def _add_section_header(self, text, level=0):
        if level == 0:
            font_size = 16
            pady = (20, 10)
            font_to_use = self.heading_font
        else:
            font_size = 14
            pady = (15, 5)
            font_to_use = ctk.CTkFont(family=self.text_font.cget("family"), size=self.text_font.cget("size"), weight="bold")
        
        header = ctk.CTkLabel(self.help_scroll_frame, text=text, font=font_to_use, wraplength=700, justify="left")
        header.pack(padx=10, pady=pady, anchor="w")

    def _add_tool_help(self, tool_name, description):
        tool_label = ctk.CTkLabel(self.help_scroll_frame, text=f"- {tool_name}:", font=ctk.CTkFont(family=self.text_font.cget("family"), size=self.text_font.cget("size"), weight="bold"), wraplength=700, justify="left")
        tool_label.pack(padx=20, pady=(5, 0), anchor="w")
        
        desc_label = ctk.CTkLabel(self.help_scroll_frame, text=description, font=self.text_font, wraplength=680, justify="left")
        desc_label.pack(padx=30, pady=(0, 10), anchor="w")

    def _add_text(self, text):
        text_label = ctk.CTkLabel(self.help_scroll_frame, text=text, font=self.text_font, wraplength=680, justify="left")
        text_label.pack(padx=20, pady=(5, 5), anchor="w")

