// Package dictdawg builds a plain left-to-right DAWG of a dictionary, as used by the
// Appel-Jacobson move generator.
package dictdawg

import (
	"github.com/iliadenisov/alphabet"
	dawg "github.com/iliadenisov/dafsa"
)

// Build returns a DAWG Finder over words, which must be alphabet-index slices sorted by
// index order and de-duplicated (see wordlist.Encode).
func Build(idx alphabet.Indexer, words [][]byte) (dawg.Finder, error) {
	d := dawg.New(idx)
	for _, w := range words {
		if err := d.AddB(w); err != nil {
			return nil, err
		}
	}
	return d.Finish(), nil
}

// Save writes the DAWG to filename. It requires an embedded alphabet (for example
// alphabet.Latin()), so that Load can reconstruct it.
func Save(f dawg.Finder, filename string) error {
	_, err := f.Save(filename)
	return err
}

// Load reopens a DAWG saved with Save.
func Load(filename string) (dawg.Finder, error) { return dawg.Load(filename) }
