package migrate

import (
	"github.com/jinzhu/gorm"
	"github.com/pingcap/log"
	"github.com/pingcap/tep/db/entity"
	"github.com/pingcap/tep/pkg/utils"
)

var tables = []interface{}{
	&entity.Az{}, &entity.Machine{}, &entity.OperateEvent{}, &entity.User{},
	&entity.UserGroup{}, &entity.Alerts{}, &entity.AlertAnnotations{}, &entity.Message{},
}

//this method will called when we need to setup a new TEP database, so please add all tep related tables, and insert data if needed
func initTEPDB(db *gorm.DB) error {
	//create the tables in a empty database
	for _, table := range tables {
		if err := db.CreateTable(table).Error; err != nil {
			return err
		}
	}
	//add foreign keys if needed
	db.Model(&entity.AlertLabels{}).AddForeignKey("alert_id", "alerts(id)", "CASCADE", "CASCADE")
	db.Model(&entity.AlertAnnotations{}).AddForeignKey("alert_id", "alerts(id)", "CASCADE", "CASCADE")

	//insert some data to the new tep database
	log.Info("start to add user")
	return initUser(db)
}

func initUser(db *gorm.DB) error {
	if err := db.Create(&entity.UserGroup{GroupName: "admin", Privileges: "*"}).Error; err != nil {
		return err
	}

	password, err := utils.HashPassword("admin")
	if err != nil {
		return err
	}
	user := &entity.User{Username: "admin", Password: string(password), Group: "admin"}
	return db.Create(user).Error
}
