# frozen_string_literal: true

require “pakyow/data/migrator”

namespace :db do

desc "Finalize a database"
option :adapter, "The adapter to migrate"
option :connection, "The connection to migrate"
task :finalize, [:adapter, :connection] do |_, args|
  unless Pakyow.booted?
    Pakyow.boot(unsafe: true)
  end

  opts = {
    adapter: args[:adapter],
    connection: args[:connection],
    connection_overrides: {
      path: -> (connection_path) {
        "#{connection_path}-migrator"
      }
    }
  }

  # Use a global connection for creating the database.
  #
  global_migrator = Pakyow::Data::Migrator.connect_global(opts)

  # Create the migrator database unless it exists.
  #
  global_migrator.create!

  # Use a normal migrator for migrating.
  #
  migrator = Pakyow::Data::Migrator.connect(opts)

  # Run the existing migrations on it.
  #
  migrator.migrate!

  # Create migrations for unmigrated schema.
  #
  migrator.finalize!

  # Disconnect.
  #
  migrator.disconnect!

  # Drop the migrator database.
  #
  global_migrator.drop!

  # Disconnect the migrator database.
  #
  global_migrator.disconnect!
end

end