package incus

import (
	"time"
)

type InstanceSentinel struct {
	Backup                   bool
	Sync                     bool
	BackupSchedule           string
	BackupNotifyURL          string
	SyncNotifyURL            string
	SyncSchedule             string
	SyncTargetRemote         string
	SyncTargetPool           string
	SyncTargetInstanceSuffix string
}

type Instance struct {
	Architecture string                 `json:"architecture"`
	Config       map[string]string      `json:"config"`
	Devices      map[string]interface{} `json:"devices"`
	Ephemeral    bool                   `json:"ephemeral"`
	Profiles     []string               `json:"profiles"`
	Stateful     bool                   `json:"stateful"`
	Description  string                 `json:"description"`
	CreatedAt    time.Time              `json:"created_at"`
	Name         string                 `json:"name"`
	Status       string                 `json:"status"`
	StatusCode   int                    `json:"status_code"`
	LastUsedAt   time.Time              `json:"last_used_at"`
	Location     string                 `json:"location"`
	Type         string                 `json:"type"`
	Project      string                 `json:"project"`
}

func (i *Instance) Sentinel() InstanceSentinel {
	s := InstanceSentinel{
		Backup:                   false,
		Sync:                     false,
		BackupNotifyURL:          "",
		SyncNotifyURL:            "",
		BackupSchedule:           "0 6 * * *",
		SyncSchedule:             "0 6 * * *",
		SyncTargetRemote:         "",
		SyncTargetPool:           "pool0",
		SyncTargetInstanceSuffix: "-cold",
	}

	if val, ok := i.Config["user.backup"]; ok {
		s.Backup = val == "true"
	}

	if val, ok := i.Config["user.sync"]; ok {
		s.Sync = val == "true"
	}

	if val, ok := i.Config["user.backup-notify-url"]; ok {
		s.BackupNotifyURL = val
	}

	if val, ok := i.Config["user.sync-notify-url"]; ok {
		s.SyncNotifyURL = val
	}

	if val, ok := i.Config["user.backup-schedule"]; ok {
		s.BackupSchedule = val
	}

	if val, ok := i.Config["user.sync-schedule"]; ok {
		s.SyncSchedule = val
	}

	if val, ok := i.Config["user.sync-target-remote"]; ok {
		s.SyncTargetRemote = val
	}

	if val, ok := i.Config["user.sync-target-pool"]; ok {
		s.SyncTargetPool = val
	}

	if val, ok := i.Config["user.sync-target-instance-suffix"]; ok {
		s.SyncTargetInstanceSuffix = val
	}

	return s
}
