package main

import (
	"fmt"
	"io"
	"os"
	"sort"
)

var searchList = make([]FS, 0)

// read the first file matching path in the search list
func read(path string) (ba []byte, err error) {
	for _, fs := range searchList {
		var r io.ReadCloser
		r, err = fs.Open(path)
		if os.IsNotExist(err) {
			continue
		}
		if err != nil {
			return
		}

		defer r.Close()
		return io.ReadAll(r)
	}

	err = fmt.Errorf("%s: %w", path, os.ErrNotExist)
	return
}

func listBase(path string) ([]string, error) {
	return fsFS{base}.List(path)
}

func listMerged(path string) (entries []string, err error) {
	seen := map[string]bool{}
	for _, fs := range searchList {
		var fsEnts []string
		fsEnts, err = fs.List(path)
		if os.IsNotExist(err) {
			err = nil
			continue
		}
		if err != nil {
			return
		}

		for _, ent := range fsEnts {
			if !seen[ent] {
				entries = append(entries, ent)
				seen[ent] = true
			}
		}
	}

	sort.Strings(entries)
	return
}
