from services.vulnerability_intelligence.handlers.base_handler import BaseHandler
from models.vulnerability_intelligence import VulnerabilityIntelligence

class GitHubHandler(BaseHandler):
    def apply(self, vuln_intelligence: VulnerabilityIntelligence):
        try:
            related_urls = self.data.get('github_related_urls', [])
            vuln_intelligence.reference_urls.update(related_urls)
    
            github_pocs = self.data.get('github_pocs', [])
            if github_pocs:
                for poc in github_pocs:
                    vuln_intelligence.urls.append({
                            "source": self.enrich_source_name(f"Trickest CVE GitHub - PoC Exploit"),
                            "url": poc,
                            "date": "N/A"
                        })
    
            github_references = self.data.get('github_references', [])
            vuln_intelligence.reference_urls.update(github_references)
    
            github_cwe = self.data.get('github_cwe', [])
            vuln_intelligence.weaknesses.update(github_cwe)
    
            github_vulnerability_type = self.data.get('github_vulnerability_type', [])
            vuln_intelligence.weaknesses.update(github_vulnerability_type)
    
            github_products = self.data.get('github_products', [])
            vuln_intelligence.vulnerable_components.update(github_products)
    
            github_versions = self.data.get('github_versions', [])
            vuln_intelligence.vulnerable_components.update(github_versions)
    
            github_tags = self.data.get('github_tags', [])
            vuln_intelligence.tags.update(github_tags)
    
            github_mitigation = self.data.get('github_mitigation')
            if github_mitigation:
                formatted_mitigation = github_mitigation.replace('\n', ' ')
                vuln_intelligence.descriptions.append({
                    "source": self.enrich_source_name_mitigation("Trickest CVE GitHub"),
                    "text": formatted_mitigation,
                    "date": "N/A"
                })
    
            github_description = self.data.get('github_description')
            if github_description:
                formatted_description = github_description.replace('\n', ' ')
                if not any(desc["text"] == formatted_description for desc in vuln_intelligence.descriptions):
                    vuln_intelligence.descriptions.append({
                        "source": self.enrich_source_name("Trickest CVE GitHub"),
                        "text": formatted_description,
                        "date": "N/A"
                    })
    
            cve_link = self.data.get('cve_link')
            if cve_link:
                vuln_intelligence.reference_urls.add(cve_link)
    
        except Exception as e:
            print(f"[!] Error applying GitHub enrichment: {e}")
