module CKEditor5::Rails::Cdn::Helpers

def build_base_cdn_bundle(cdn, version, translations)

def build_base_cdn_bundle(cdn, version, translations)
  Cdn::CKEditorBundle.new(
    Semver.new(version),
    'ckeditor5',
    translations: translations,
    cdn: cdn
  )
end

def build_ckbox_cdn_bundle(ckbox)

def build_ckbox_cdn_bundle(ckbox)
  Cdn::CKBoxBundle.new(
    Semver.new(ckbox[:version]),
    theme: ckbox[:theme] || :lark,
    cdn: ckbox[:cdn] || :ckbox
  )
end

def build_premium_cdn_bundle(cdn, version, translations)

def build_premium_cdn_bundle(cdn, version, translations)
  Cdn::CKEditorBundle.new(
    Semver.new(version),
    'ckeditor5-premium-features',
    translations: translations,
    cdn: cdn
  )
end

def ckeditor5_assets(**kwargs)

def ckeditor5_assets(**kwargs)
  if kwargs[:license_key] && kwargs[:license_key] != 'GPL'
    ckeditor5_cloud_assets(**kwargs)
  else
    ckeditor5_cdn_assets(**kwargs.merge(cdn: Engine.default_preset.cdn))
  end
end

def ckeditor5_cdn_assets(preset: :default, **kwargs)

def ckeditor5_cdn_assets(preset: :default, **kwargs)
  merge_with_editor_preset(preset, **kwargs) => {
    cdn:,
    version:,
    translations:,
    ckbox:,
    license_key:,
    premium:,
    **kwargs
  }
  bundle = build_base_cdn_bundle(cdn, version, translations)
  bundle << build_premium_cdn_bundle(cdn, version, translations) if premium
  bundle << build_ckbox_cdn_bundle(ckbox) if ckbox
  @__ckeditor_context = {
    license_key: license_key,
    bundle: bundle,
    preset: preset
  }
  Assets::AssetsBundleHtmlSerializer.new(bundle).to_html
end

def merge_with_editor_preset(preset, **kwargs)

def merge_with_editor_preset(preset, **kwargs)
  found_preset = Engine.base.presets[preset]
  if found_preset.blank?
    raise ArgumentError,
          "Poor thing. You forgot to define your #{preset} preset. " \
          'Please define it in initializer. Thank you!'
  end
  hash = found_preset.to_h_with_overrides(**kwargs)
  %i[version type].each do |key|
    next if hash[key].present?
    raise ArgumentError,
          "Poor thing. You forgot to define #{key}. Make sure you passed `#{key}:` parameter to " \
          "`ckeditor5_cdn_assets` or defined default one in your `#{preset}` preset!"
  end
  hash
end