package file

import (
	"fmt"
	"os"

	"github.com/zitadel/zitadel/internal/config"
	"github.com/zitadel/zitadel/internal/crypto"
)

const (
	ZitadelKeyPath = "ZITADEL_KEY_PATH"
)

type Storage struct{}

func (d *Storage) ReadKeys() (crypto.Keys, error) {
	path := os.Getenv(ZitadelKeyPath)
	if path == "" {
		return nil, fmt.Errorf("no path set, %s is empty", ZitadelKeyPath)
	}
	keys := new(crypto.Keys)
	err := config.Read(keys, path)
	return *keys, err
}

func (d *Storage) ReadKey(id string) (*crypto.Key, error) {
	keys, err := d.ReadKeys()
	if err != nil {
		return nil, err
	}
	key, ok := keys[id]
	if !ok {
		return nil, fmt.Errorf("key no found")
	}
	return &crypto.Key{
		ID:    id,
		Value: key,
	}, nil
}

func (d *Storage) CreateKeys(keys ...*crypto.Key) error {
	return fmt.Errorf("this provider is not able to store new keys")
}