package level

import "git.kirsle.net/apps/doodle/pkg/log"

// Maintenance functions for the file format on disk.

// PruneLinks cleans up any Actor Links that can not be resolved in the
// level data. For example, if actors were linked in Edit Mode and one
// actor is deleted leaving a broken link.
//
// Returns the number of broken links pruned.
//
// This is called automatically in WriteFile.
func (m *Level) PruneLinks() int {
	var count int
	for id, actor := range m.Actors {
		var newLinks []string

		for _, linkID := range actor.Links {
			if _, ok := m.Actors[linkID]; !ok {
				log.Warn("Level.PruneLinks: actor %s (%s) was linked to unresolved actor %s",
					id,
					actor.Filename,
					linkID,
				)
				count++
				continue
			}
			newLinks = append(newLinks, linkID)
		}

		actor.Links = newLinks
	}
	return count
}
