// Package identitydoc resolves the workspace-backed always-on identity document.
package identitydoc

import (
	"bytes"
	"errors"
	"io/fs"
	"os"
	"path/filepath"
)

const (
	// RemoteMemoryIndexPath is the workdir-relative Cloud Memory index.
	RemoteMemoryIndexPath = "memory/MEMORY.md"
	// ActiveIdentityPath is the sole workdir-relative Cloud Memory identity document.
	ActiveIdentityPath = "memory/system/identity.md"
)

// ReadActive reads the active Cloud Memory identity document.
func ReadActive(workDir string) (string, []byte, bool, error) {
	data, ok, err := readNonEmpty(filepath.Join(workDir, ActiveIdentityPath))
	if err != nil {
		return ActiveIdentityPath, nil, false, err
	}
	if !ok {
		return "", nil, false, nil
	}
	return ActiveIdentityPath, data, true, nil
}

func readNonEmpty(path string) ([]byte, bool, error) {
	data, err := os.ReadFile(path)
	if errors.Is(err, fs.ErrNotExist) {
		return nil, false, nil
	}
	if err != nil {
		return nil, false, err
	}
	if len(bytes.TrimSpace(data)) == 0 {
		return nil, false, nil
	}
	return data, true, nil
}
