package generate

import (
	"fmt"
	"strings"

	"github.com/golang/glog"
)

type Tester interface {
	Has(dir string) (string, bool, error)
}

type Strategy int

const (
	StrategyUnspecified Strategy = iota
	StrategySource
	StrategyDocker
	StrategyPipeline
)

func (s Strategy) String() string {
	switch s {
	case StrategyUnspecified:
		return ""
	case StrategySource:
		return "source"
	case StrategyDocker:
		return "Docker"
	case StrategyPipeline:
		return "pipeline"
	}
	glog.Error("unknown strategy")
	return ""
}

func (s Strategy) Type() string {
	return "strategy"
}

func (s *Strategy) Set(str string) error {
	switch strings.ToLower(str) {
	case "":
		*s = StrategyUnspecified
	case "docker":
		*s = StrategyDocker
	case "pipeline":
		*s = StrategyPipeline
	case "source":
		*s = StrategySource
	default:
		return fmt.Errorf("invalid strategy: %s. Must be 'docker', 'pipeline' or 'source'.", str)
	}
	return nil
}