package volume

import (
	"runtime"

	"github.com/docker/docker/api/types/mount"
)

const (
	// OSLinux is the same as runtime.GOOS on linux
	OSLinux = "linux"
	// OSWindows is the same as runtime.GOOS on windows
	OSWindows = "windows"
)

// Parser represents a platform specific parser for mount expressions
type Parser interface {
	ParseMountRaw(raw, volumeDriver string) (*MountPoint, error)
	ParseMountSpec(cfg mount.Mount) (*MountPoint, error)
	ParseVolumesFrom(spec string) (string, string, error)
	DefaultPropagationMode() mount.Propagation
	ConvertTmpfsOptions(opt *mount.TmpfsOptions, readOnly bool) (string, error)
	DefaultCopyMode() bool
	ValidateVolumeName(name string) error
	ReadWrite(mode string) bool
	IsBackwardCompatible(m *MountPoint) bool
	HasResource(m *MountPoint, absPath string) bool
	ValidateTmpfsMountDestination(dest string) error

	validateMountConfig(mt *mount.Mount) error
}

// NewParser creates a parser for a given container OS, depending on the current host OS (linux on a windows host will resolve to an lcowParser)
func NewParser(containerOS string) Parser {
	switch containerOS {
	case OSWindows:
		return &windowsParser{}
	}
	if runtime.GOOS == OSWindows {
		return &lcowParser{}
	}
	return &linuxParser{}
}
