package providers

import (
	"fmt"
	"strings"
)

// HetznerProvider ist der Provider für Hetzner
type HetznerProvider struct{}

func NewHetznerProvider() *HetznerProvider {
	return &HetznerProvider{}
}

func (p *HetznerProvider) GetName() string {
	return "hetzner"
}

func (p *HetznerProvider) GetDisplayName() string {
	return "Hetzner"
}

func (p *HetznerProvider) GetDescription() string {
	return "Hetzner SSL Certificate Provider"
}

func (p *HetznerProvider) ValidateConfig(settings map[string]interface{}) error {
	apiKey, ok := settings["apiKey"].(string)
	if !ok || strings.TrimSpace(apiKey) == "" {
		return fmt.Errorf("apiKey ist erforderlich")
	}

	return nil
}

func (p *HetznerProvider) TestConnection(settings map[string]interface{}) error {
	// Hier würde die tatsächliche Verbindung zu Hetzner getestet werden
	// Für jetzt nur Validierung
	return p.ValidateConfig(settings)
}

// GetRequiredSettings gibt die erforderlichen Einstellungen zurück
func (p *HetznerProvider) GetRequiredSettings() []SettingField {
	return []SettingField{
		{
			Name:        "apiKey",
			Label:       "API Key",
			Type:        "password",
			Required:    true,
			Description: "Hetzner API Key",
		},
	}
}

// SignCSR signiert einen CSR (noch nicht implementiert)
func (p *HetznerProvider) SignCSR(csrPEM string, settings map[string]interface{}) (*SignCSRResult, error) {
	return nil, fmt.Errorf("Hetzner CSR-Signierung noch nicht implementiert")
}

// GetCertificate ruft ein Zertifikat ab (noch nicht implementiert)
func (p *HetznerProvider) GetCertificate(certificateID string, settings map[string]interface{}) (string, error) {
	return "", fmt.Errorf("Hetzner Zertifikat-Abruf noch nicht implementiert")
}
