# frozen_string_literal: true

require_relative "../../../github/yarn_audit"

module Neetob
  class CLI
    module MonthlyAudit
      module Security
        module Code
          class YarnAudit < CLI::Base
            def initialize
              super()
            end

            def run
              ui.success("### 1.1.2. Checking whether running `yarn audit` throws any vulnerabilities")
              repo_data = [["Repository", "Vulnerabilities Found", "Comments", "Audit Passed"]]
              ui.info "\n"
              NeetoCompliance::NeetoRepos.products.keys.each do |repo|
                ui.info("Checking yarn audit run results for #{repo}", print_to_audit_log: false)
                yarn_audit_result = Neetob::CLI::Github::YarnAudit.new([repo]).run
                vulnerabilities_found = "No"
                audit_passed = "No"
                comments = nil
                if yarn_audit_result && yarn_audit_result.include?("0 vulnerabilities found")
                  audit_passed = "Yes"
                else
                  vulnerabilities_found = "Yes"
                  vulnerabilities = yarn_audit_result.split("\n").select { |line|
 line.include?("vulnerabilities found") }.first.strip
                  severity = yarn_audit_result.split("\n").select { |line|
 line.include?("Severity:") }.first.strip.gsub("|", ",")
                  comments = "#{vulnerabilities}<br>#{severity}"
                end
                repo_data << [repo, vulnerabilities_found, comments, audit_passed]
              end
              ui.print_table(repo_data)
            end
          end
        end
      end
    end
  end
end