'use client'

import { useMemo } from 'react'
import { useCompliance } from './hooks-core'

// =============================================================================
// RAG HOOKS
// =============================================================================

export function useRAG() {
  const { rag } = useCompliance()

  return useMemo(
    () => ({
      search: rag.search.bind(rag),
      searchByRegulation: rag.searchByRegulation.bind(rag),
      searchByArticle: rag.searchByArticle.bind(rag),
      ask: rag.ask.bind(rag),
      askAboutRegulation: rag.askAboutRegulation.bind(rag),
      explainArticle: rag.explainArticle.bind(rag),
      checkCompliance: rag.checkCompliance.bind(rag),
      getQuickAnswer: rag.getQuickAnswer.bind(rag),
      findRelevantArticles: rag.findRelevantArticles.bind(rag),
      availableRegulations: rag.getAvailableRegulations(),
      chatHistory: rag.getChatHistory(),
      clearChatHistory: rag.clearChatHistory.bind(rag),
      startNewSession: rag.startNewSession.bind(rag),
    }),
    [rag]
  )
}

// =============================================================================
// SECURITY HOOKS
// =============================================================================

export function useSecurity() {
  const { security, state } = useCompliance()

  return useMemo(
    () => ({
      // SBOM
      sbom: state.sbom,
      components: security.getComponents(),
      vulnerableComponents: security.getVulnerableComponents(),
      licenseSummary: security.getLicenseSummary(),

      // Issues
      issues: state.securityIssues,
      openIssues: security.getOpenIssues(),
      criticalIssues: security.getCriticalIssues(),
      getIssuesBySeverity: security.getIssuesBySeverity.bind(security),
      getIssuesByTool: security.getIssuesByTool.bind(security),

      // Backlog
      backlog: state.securityBacklog,
      overdueBacklogItems: security.getOverdueBacklogItems(),

      // Scanning
      startScan: security.startScan.bind(security),
      getScanResult: security.getScanResult.bind(security),
      lastScanResult: security.getLastScanResult(),

      // Summary
      summary: security.getSecuritySummary(),
      securityScore: security.getSecurityScore(),
      availableTools: security.getAvailableTools(),
    }),
    [security, state]
  )
}
