package internal

import (
	"github.com/urfave/cli/v2"
)

// Secrets stores the variable from SecretsFlag
var Secrets bool

// SecretsFlag turns on/off automatically generating secrets
var SecretsFlag = &cli.BoolFlag{
	Name:        "secrets",
	Aliases:     []string{"S"},
	Value:       false,
	Usage:       "Automatically generate secrets",
	Destination: &Secrets,
}

// Pass stores the variable from PassFlag
var Pass bool

// PassFlag turns on/off storing generated secrets in pass
var PassFlag = &cli.BoolFlag{
	Name:        "pass",
	Aliases:     []string{"P"},
	Value:       false,
	Usage:       "Store the generated secrets in a local pass store",
	Destination: &Pass,
}

// Context is temp
var Context string

// ContextFlag is temp
var ContextFlag = &cli.StringFlag{
	Name:        "context",
	Value:       "",
	Aliases:     []string{"c"},
	Destination: &Context,
}

// Force force functionality without asking.
var Force bool

// ForceFlag turns on/off force functionality.
var ForceFlag = &cli.BoolFlag{
	Name:        "force",
	Value:       false,
	Aliases:     []string{"f"},
	Destination: &Force,
}

// Chaos engages chaos mode.
var Chaos bool

// ChaosFlag turns on/off chaos functionality.
var ChaosFlag = &cli.BoolFlag{
	Name:        "chaos",
	Value:       false,
	Aliases:     []string{"ch"},
	Usage:       "Deploy uncommitted recipes changes. Use with care!",
	Destination: &Chaos,
}

// DNSProvider specifies a DNS provider.
var DNSProvider string

// DNSProviderFlag selects a DNS provider.
var DNSProviderFlag = &cli.StringFlag{
	Name:        "provider",
	Value:       "",
	Aliases:     []string{"p"},
	Usage:       "DNS provider",
	Destination: &DNSProvider,
}

var NoInput bool
var NoInputFlag = &cli.BoolFlag{
	Name:        "no-input",
	Value:       false,
	Aliases:     []string{"n"},
	Usage:       "Toggle non-interactive mode",
	Destination: &NoInput,
}

var DNSType string

var DNSTypeFlag = &cli.StringFlag{
	Name:        "type",
	Value:       "",
	Aliases:     []string{"t"},
	Usage:       "Domain name record type (e.g. A)",
	Destination: &DNSType,
}

var DNSName string

var DNSNameFlag = &cli.StringFlag{
	Name:        "name",
	Value:       "",
	Aliases:     []string{"n"},
	Usage:       "Domain name record name (e.g. mysubdomain)",
	Destination: &DNSName,
}

var DNSValue string

var DNSValueFlag = &cli.StringFlag{
	Name:        "value",
	Value:       "",
	Aliases:     []string{"v"},
	Usage:       "Domain name record value (e.g. 192.168.1.1)",
	Destination: &DNSValue,
}

var DNSTTL int

var DNSTTLFlag = &cli.IntFlag{
	Name:        "ttl",
	Value:       86400,
	Aliases:     []string{"T"},
	Usage:       "Domain name TTL value)",
	Destination: &DNSTTL,
}

var DNSPriority int

var DNSPriorityFlag = &cli.IntFlag{
	Name:        "priority",
	Value:       10,
	Aliases:     []string{"P"},
	Usage:       "Domain name priority value",
	Destination: &DNSPriority,
}

var ServerProvider string

var ServerProviderFlag = &cli.StringFlag{
	Name:        "provider",
	Aliases:     []string{"p"},
	Usage:       "3rd party server provider",
	Destination: &ServerProvider,
}

var CapsulInstanceURL string

var CapsulInstanceURLFlag = &cli.StringFlag{
	Name:        "capsul-url",
	Value:       "yolo.servers.coop",
	Aliases:     []string{"cu"},
	Usage:       "capsul instance URL",
	Destination: &CapsulInstanceURL,
}

var CapsulName string

var CapsulNameFlag = &cli.StringFlag{
	Name:        "capsul-name",
	Value:       "",
	Aliases:     []string{"cn"},
	Usage:       "capsul name",
	Destination: &CapsulName,
}

var CapsulType string

var CapsulTypeFlag = &cli.StringFlag{
	Name:        "capsul-type",
	Value:       "f1-xs",
	Aliases:     []string{"ct"},
	Usage:       "capsul type",
	Destination: &CapsulType,
}

var CapsulImage string

var CapsulImageFlag = &cli.StringFlag{
	Name:        "capsul-image",
	Value:       "debian10",
	Aliases:     []string{"ci"},
	Usage:       "capsul image",
	Destination: &CapsulImage,
}

var CapsulSSHKeys cli.StringSlice

var CapsulSSHKeysFlag = &cli.StringSliceFlag{
	Name:        "capsul-ssh-keys",
	Aliases:     []string{"cs"},
	Usage:       "capsul SSH key",
	Destination: &CapsulSSHKeys,
}

var CapsulAPIToken string

var CapsulAPITokenFlag = &cli.StringFlag{
	Name:        "capsul-token",
	Aliases:     []string{"ca"},
	Usage:       "capsul API token",
	EnvVars:     []string{"CAPSUL_TOKEN"},
	Destination: &CapsulAPIToken,
}

var HetznerCloudName string

var HetznerCloudNameFlag = &cli.StringFlag{
	Name:        "hetzner-name",
	Value:       "",
	Aliases:     []string{"hn"},
	Usage:       "hetzner cloud name",
	Destination: &HetznerCloudName,
}

var HetznerCloudType string

var HetznerCloudTypeFlag = &cli.StringFlag{
	Name:        "hetzner-type",
	Aliases:     []string{"ht"},
	Usage:       "hetzner cloud type",
	Destination: &HetznerCloudType,
	Value:       "cx11",
}

var HetznerCloudImage string

var HetznerCloudImageFlag = &cli.StringFlag{
	Name:        "hetzner-image",
	Aliases:     []string{"hi"},
	Usage:       "hetzner cloud image",
	Value:       "debian-10",
	Destination: &HetznerCloudImage,
}

var HetznerCloudSSHKeys cli.StringSlice

var HetznerCloudSSHKeysFlag = &cli.StringSliceFlag{
	Name:        "hetzner-ssh-keys",
	Aliases:     []string{"hs"},
	Usage:       "hetzner cloud SSH keys (e.g. me@foo.com)",
	Destination: &HetznerCloudSSHKeys,
}

var HetznerCloudLocation string

var HetznerCloudLocationFlag = &cli.StringFlag{
	Name:        "hetzner-location",
	Aliases:     []string{"hl"},
	Usage:       "hetzner cloud server location",
	Value:       "hel1",
	Destination: &HetznerCloudLocation,
}

var HetznerCloudAPIToken string

var HetznerCloudAPITokenFlag = &cli.StringFlag{
	Name:        "hetzner-token",
	Aliases:     []string{"ha"},
	Usage:       "hetzner cloud API token",
	EnvVars:     []string{"HCLOUD_TOKEN"},
	Destination: &HetznerCloudAPIToken,
}