class BackfillFeatureModelMapProviders < ActiveRecord::Migration[7.0]
  class MigrationFeatureModelMap < ActiveRecord::Base
    self.table_name = "feature_model_maps"
  end

  MODEL_PROVIDERS = {
    "gpt-4o-mini" => "openai",
    "gpt-5.5" => "openai",
    "gemini-2.5-flash" => "vertexai",
    "gemini-3.1-pro-preview" => "vertexai",
    "google/gemini-2.5-flash" => "openrouter",
    "google/gemini-3.1-pro-preview-customtools" => "openrouter",
    "gemini-embedding-001" => "openrouter"
  }.freeze

  DEFAULT_FEATURES = [
    { feature_name: "TRANSCRIPT_EMBEDDINGS", llm_model_name: "gemini-embedding-001", provider: "openrouter" },
    { feature_name: "RAG_ASSISTANT", llm_model_name: "google/gemini-3.1-pro-preview-customtools", provider: "openrouter" }
  ].freeze

  def up
    MigrationFeatureModelMap.reset_column_information

    MigrationFeatureModelMap.find_each do |map|
      provider = MODEL_PROVIDERS[map.llm_model_name]
      map.update_columns(provider:) if provider.present? && map.provider != provider
    end

    DEFAULT_FEATURES.each do |attributes|
      map = MigrationFeatureModelMap.find_or_initialize_by(feature_name: attributes[:feature_name])
      map.assign_attributes(attributes) if map.new_record?
      map.save!
    end
  end

  def down
    DEFAULT_FEATURES.each do |attributes|
      MigrationFeatureModelMap.find_by(feature_name: attributes[:feature_name])&.destroy!
    end
  end
end
