package config

import (
	"encoding/base64"
	"errors"
	"fmt"
	"os"

	"gopkg.in/yaml.v3"
)

type ServerConfig struct {
	K1Base64   string `yaml:"k1_base64"`
	ListenAddr string `yaml:"listen_addr"`
}

type LoadedServerConfig struct {
	KeyK1      []byte
	ListenAddr string
}

func LoadServerConfig(path string) (*LoadedServerConfig, error) {
	data, err := os.ReadFile(path)
	if err != nil {
		return nil, fmt.Errorf("read config: %w", err)
	}
	var raw ServerConfig
	if err := yaml.Unmarshal(data, &raw); err != nil {
		return nil, fmt.Errorf("unmarshal yaml: %w", err)
	}
	if raw.K1Base64 == "" {
		return nil, errors.New("k1_base64 is required")
	}
	k1, err := base64.StdEncoding.DecodeString(raw.K1Base64)
	if err != nil {
		return nil, fmt.Errorf("decode k1 base64: %w", err)
	}
	if len(k1) != 32 {
		return nil, fmt.Errorf("k1 must be 32 bytes, got %d", len(k1))
	}
	addr := raw.ListenAddr
	if addr == "" {
		addr = ":8080"
	}
	return &LoadedServerConfig{KeyK1: k1, ListenAddr: addr}, nil
}


