class Admin::Communication::Sparkpost::SendingDomainsController < Admin::Communication::Controller
  def show
    render_success :ok, json: setting_props
  end

  def create
    if setting.update(setting_params)
      render_success :ok, json: setting_props
    else
      render_error :unprocessable_entity, errors: setting
    end
  end

  def update
    if setting.verify
      render_success :ok, json: setting_props
    else
      render_error :unprocessable_entity
    end
  end

  private
    def setting
      @setting ||= current_school.find_or_build_communication_sparkpost_sending_config
    end

    def setting_params
      params.permit(:domain)
    end

    def dkim_record
      @dkim_record ||= setting.dkim_record
    end

    def setting_props
      {}.tap do |props|
        props[:id] = setting.id
        props[:event] = setting.event
        props[:domain] = setting.domain
        props[:verified] = setting.verified
        props[:dns_type] = 'TXT'
        props[:updated_at] = setting.updated_at
        return props if setting.id.nil?

        props[:hostname] = "#{dkim_record['selector']}._domainkey.#{dkim_record['signing_domain']}"
        props[:value] = "v=DKIM1; k=rsa; h=sha256; p=#{dkim_record['public']}"
      end
    end
end
