class DataProtectionConfirmationBannerComponent < ViewComponent::Base
  include Rails.application.routes.url_helpers

  attr_reader :user, :organisation

  def initialize(user:, organisation: nil)
    @user = user
    @organisation = organisation

    super
  end

  def display_banner?
    return false if user.support? && organisation.blank?
    return true if org_without_dpo?
    return false if !org_or_user_org.holds_own_stock? && org_or_user_org.stock_owners.empty? && org_or_user_org.absorbed_organisations.empty?

    !org_or_user_org.data_protection_confirmed? || !org_or_user_org.organisation_or_stock_owner_signed_dsa_and_holds_own_stock?
  end

  def header_text
    if org_without_dpo?
      "To create logs your organisation must state a data protection officer. They must sign the Data Sharing Agreement."
    elsif !org_or_user_org.holds_own_stock? && org_or_user_org.data_protection_confirmed?
      "Your organisation does not own stock. To create logs your stock owner(s) must accept the Data Sharing Agreement on CORE."
    elsif user.is_dpo?
      "Your organisation must accept the Data Sharing Agreement before you can create any logs."
    else
      "Your data protection officer must accept the Data Sharing Agreement on CORE before you can create any logs."
    end
  end

  def banner_text
    if org_without_dpo? || user.is_dpo? || !org_or_user_org.holds_own_stock?
      govuk_link_to(
        link_text,
        link_href,
        class: "govuk-notification-banner__link govuk-!-font-weight-bold",
      )
    else
      tag.p data_protection_officers_text
    end
  end

private

  def data_protection_officers_text
    if org_or_user_org.data_protection_officers.any?
      "You can ask: #{org_or_user_org.data_protection_officers.map(&:name).sort_by(&:downcase).join(', ')}"
    end
  end

  def link_text
    if dpo_required?
      "Contact helpdesk to assign a data protection officer"
    elsif !org_or_user_org.holds_own_stock? && org_or_user_org.data_protection_confirmed?
      "View or add stock owners"
    else
      "Read the Data Sharing Agreement"
    end
  end

  def link_href
    if dpo_required?
      GlobalConstants::HELPDESK_URL
    elsif !org_or_user_org.holds_own_stock? && org_or_user_org.data_protection_confirmed?
      stock_owners_organisation_path(org_or_user_org)
    else
      data_sharing_agreement_organisation_path(org_or_user_org)
    end
  end

  def dpo_required?
    org_or_user_org.data_protection_officers.empty?
  end

  def org_or_user_org
    organisation.presence || user.organisation
  end

  def org_without_dpo?
    org_or_user_org.data_protection_officers.empty?
  end
end