class TitleProviderGroupName < ApplicationRecord
  include Contextuable
  
  has_many :title_provider_groups, dependent: :destroy
  has_many :titles

  before_validation :initialize_data, on: :create
  validates :name, presence: true, uniqueness: { scope: :country_id }

  accepts_nested_attributes_for :title_provider_groups, allow_destroy: true

  def duplicate
    TitleProviderGroupName.new(duplicate_attributes)
  end

  private

  def initialize_data
    self.country_id ||= 1
  end

  def duplicate_attributes
    attr = attributes.slice(*duplicate_columns)
    attr['title_provider_groups_attributes'] = title_provider_groups.map do |title_provider_group|
      title_provider_groups_attr = title_provider_group.attributes.slice(*%w[provider_id])
      title_provider_groups_attr['authorizations_attributes'] = title_provider_group.authorizations.map do |authorization|
        authorization_attr = authorization.attributes.slice(*%w[permission_label_id])
        authorization_attr
      end
      title_provider_groups_attr
    end
    now = Time.now
    suffix = "_#{now.to_i}#{now.usec}"
    attr['name'] = "#{attr['name'][0...255 - suffix.size]}#{suffix}"
    attr
  end

  def duplicate_columns
    TitleProviderGroupName.column_names - %w[id created_at updated_at]
  end
end
