package common

import (
	"fmt"
	"github.com/fiskerinc/cloud-services/pkg/common/dbbasemodel"
)

// CarUpdate schema
type CarUpdate struct {
	ID               int64           `json:"id,omitempty"`
	VIN              string          `pg:",unique:vin_update_manifest" json:"vin" validate:"required,max=17"`
	UpdateManifestID int64           `pg:",unique:vin_update_manifest" json:"manifest_id,omitempty" validate:"required"`
	Status           string          `pg:"default:'pending'" json:"status,omitempty" validate:"max=100"`
	ErrorCode        int             `json:"err,omitempty"`
	Info             string          `json:"info,omitempty" pg:"info" validate:"max=1000"`
	Username         string          `json:"username,omitempty" validate:"required"`
	UpdateManifest   *UpdateManifest `pg:"rel:has-one" json:"updatemanifest,omitempty"`
	UpdateSource     string
	dbbasemodel.DBModelBase
}

func (cu CarUpdate) String() string {
	return fmt.Sprintf("CarUpdate<%d %d %s %s>", cu.ID, cu.UpdateManifestID, cu.VIN, cu.Status)
}

func (cu *CarUpdate) Scrub() {
	cu.UpdateManifestID = 0
	cu.UpdateManifest = nil
	cu.CreatedAt = nil
	cu.UpdatedAt = nil
}

const (
	UPDATE_SOURCE_OTA        = "OTA"        // The cloud has deployed this update
	UPDATE_SOURCE_AFTERSALES = "AFTERSALES" // An update generated to be sent by aftersales.
	UPDATE_SOURCE_FLASHPACK  = "FLASHPACK"
)
