package debianpatch

import (
	"strings"
)

// BootcImageInfo contains the validation logic for bootc images
type BootcImageInfo struct {
	Labels map[string]string `json:"Labels"`
}

// ContainerImage represents a container image with labels
type ContainerImage struct {
	Labels map[string]string
	Ref    string
}

// ValidateImage checks if an image is a valid bootc image using our Debian-aware validation
func ValidateImage(imageRef string) error {
	// This function will be called before the upstream images library validation
	// In practice, you'd need to:
	// 1. Inspect the container image to get labels
	// 2. Call ValidateBootcImage(labels, imageRef)
	
	// For now, this is a placeholder that demonstrates the integration point
	// The actual implementation would need to integrate with the container inspection logic
	
	return nil
}

// PreValidateImage performs validation before the upstream images library processes the image
func PreValidateImage(imageRef string) error {
	// This is called before the upstream validation
	// We can add Debian-specific pre-validation here
	
	// Check if the image reference looks like a Debian image
	if strings.Contains(imageRef, "debian") || strings.Contains(imageRef, "particle-os") {
		// This is a hint that we might be dealing with a Debian image
		// We could add additional validation here
	}
	
	return nil
}

// PostValidateImage performs validation after the upstream images library processes the image
func PostValidateImage(imageRef string, labels map[string]string) error {
	// This is called after the upstream validation
	// We can add Debian-specific post-validation here
	
	// Check if this is a Debian bootc image
	if GetBootcType(labels) == "debian" {
		// Perform Debian-specific validations
		return ValidateDebianBootcImage(labels, imageRef)
	}
	
	return nil
}

// GetImageLabels extracts labels from a container image
// This is a placeholder - in practice, you'd integrate with the actual container inspection
func GetImageLabels(imageRef string) (map[string]string, error) {
	// This would integrate with the actual container inspection logic
	// For now, return an empty map as a placeholder
	return make(map[string]string), nil
}

// IsDebianImage checks if an image is specifically a Debian image
func IsDebianImage(labels map[string]string) bool {
	return GetBootcType(labels) == "debian"
}

// GetDebianVersion extracts Debian version information from labels
func GetDebianVersion(labels map[string]string) string {
	// Check for Debian-specific version labels
	if version, exists := labels["org.debian.version"]; exists {
		return version
	}
	
	// Check for general version labels
	if version, exists := labels["version"]; exists {
		return version
	}
	
	return "unknown"
}
