package auth

import (
	"crypto/subtle"
	"fmt"

	"git.warky.dev/wdevs/amcs/internal/config"
)

type Keyring struct {
	keys []config.APIKey
}

func NewKeyring(keys []config.APIKey) (*Keyring, error) {
	if len(keys) == 0 {
		return nil, fmt.Errorf("keyring requires at least one key")
	}

	return &Keyring{keys: append([]config.APIKey(nil), keys...)}, nil
}

func (k *Keyring) Lookup(value string) (string, bool) {
	for _, key := range k.keys {
		if subtle.ConstantTimeCompare([]byte(key.Value), []byte(value)) == 1 {
			return key.ID, true
		}
	}
	return "", false
}
