package database

import "sort"

// sortMigrationNames returns a sorted copy of the names slice.
func sortMigrationNames(names []string) []string {
	sorted := make([]string, len(names))
	copy(sorted, names)
	sort.Strings(sorted)
	return sorted
}

// buildAppliedSet converts a list of applied migrations to a lookup set.
func buildAppliedSet(applied []DataMigration) map[string]bool {
	set := make(map[string]bool, len(applied))
	for _, m := range applied {
		set[m.Name] = true
	}
	return set
}

// filterPending returns names not present in the applied set.
func filterPending(names []string, applied map[string]bool) []string {
	var pending []string
	for _, name := range names {
		if !applied[name] {
			pending = append(pending, name)
		}
	}
	return pending
}
