package models

// DockerfileData holds the common data for any Dockerfile template.
// Specific templates might embed this or use a more specific struct.
type DockerfileData struct {
	AppPort int
	AppName string
}

// GolangDockerfileData holds data specific to the Go Dockerfile template.
type GolangDockerfileData struct {
	DockerfileData // Embed common fields
	GoVersion      string
	StaticDir      string // Optional: path to static assets to be copied
}

// NodejsDockerfileData holds data specific to the Node.js Dockerfile template.
type NodejsDockerfileData struct {
	DockerfileData // Embed common fields
	NodeVersion    string
	BuildArgs      string // Optional: arguments for npm run build
	BuildOutputDir string // Optional: output directory of the build step (e.g., "dist", "build")
	Entrypoint     string // e.g., "server.js" or "dist/index.js"
}

// ComposeVolumeData defines a volume mapping for docker-compose.
type ComposeVolumeData struct {
	HostPath      string
	ContainerPath string
	ReadOnly      bool
}

// ComposeData holds data for the docker-compose.yml template.
type ComposeData struct {
	ServiceName        string
	ImageName          string // Full image name, e.g., your-registry.com/app-name:tag
	HostPort           int    // Port exposed on the host machine
	AppPort            int    // Port the application inside the container listens on
	Environment        map[string]string
	Volumes            []ComposeVolumeData
	Domain             string            // Domain for Traefik routing
	CertResolver       string            // Traefik certificate resolver name
	ExtraTraefikLabels map[string]string // For any additional Traefik labels
}
