#!/usr/bin/env ruby
# frozen_string_literal: true

# Generate an AI Context migration file and spec with the current timestamp.

require_relative 'lib/migration_creator'

module GitLab
  module MigrationTools
    class AIContextMigrationCreator < BaseMigrationCreator
      protected

      def create_options_struct
        Struct.new(
          :name,
          :milestone,
          :feature_category
        )
      end

      def collect_input
        options.name = read_name
        options.milestone = current_milestone
        options.feature_category = read_variable('feature_category', 'The feature category, like: `code_suggestions`')
      end

      def file_path
        "ee/db/active_context/migrate/#{file_name}.rb"
      end

      def spec_file_path
        "ee/spec/db/active_context/migrate/#{file_name}_spec.rb"
      end

      def file_contents
        <<~RUBY
          # frozen_string_literal: true

          class #{options.name} < ActiveContext::Migration[1.0]
            milestone '#{options.milestone}'

            def migrate!
              # TODO: Implement migration logic
            end
          end
        RUBY
      end

      def spec_contents
        <<~RUBY
          # frozen_string_literal: true

          require 'spec_helper'
          require File.expand_path('#{file_path}')

          RSpec.describe #{options.name}, feature_category: :#{options.feature_category.parameterize.underscore} do
            let(:version) { #{timestamp} }
            let(:migration) { ::ActiveContext::Migration::Dictionary.instance.find_by_version(version) }

            subject(:migrate) { migration.new.migrate! }
          end
        RUBY
      end
    end
  end
end

GitLab::MigrationTools::AIContextMigrationCreator.new.execute if $PROGRAM_NAME == __FILE__
