package dbutil

// Database access should be done through this file.
import (
	entity "github.com/tidbcloud/core-svc/model"
	"gorm.io/gorm"
)

func assembleReplicationTracking(r entity.Replication) entity.ReplicationTracking {
	return entity.ReplicationTracking{
		ReplicationID: r.ID,
		Status:        r.ReplicationStatus,
	}
}

func UpdateReplication(tx *gorm.DB, r *entity.Replication) error {
	var oldR entity.Replication
	var err error
	err = entity.NewReplicationQuerySet(tx).IDEq(r.ID).One(&oldR)
	if err != nil {
		return err
	}
	err = r.Update(
		tx,
		entity.ReplicationDBSchema.ReplicationStatus,
		entity.ReplicationDBSchema.BackupID,
		entity.ReplicationDBSchema.SecondaryClusterID,
		entity.ReplicationDBSchema.VPCPeeringID,
		entity.ReplicationDBSchema.SecondaryPassword,
		entity.ReplicationDBSchema.DetachUserID,
		entity.ReplicationDBSchema.LagTimeWhenDetach,
		entity.ReplicationDBSchema.DetachType,
		entity.ReplicationDBSchema.DetachTso,
		entity.ReplicationDBSchema.DetachCheckpointTso)
	if err != nil {
		return err
	}

	// create tracking only if status is change
	if oldR.ReplicationStatus != r.ReplicationStatus {
		tracking := assembleReplicationTracking(*r)
		return tracking.Create(tx)
	}
	return nil
}
