package mysql

import (
	"context"

	"gorm.io/gorm"

	"github.com/pingcap-inc/data-ingestion-tools/model"
)

type bqOrder struct {
	db *gorm.DB
}

func newBqOrder(ds *datastore) *bqOrder {
	return &bqOrder{db: ds.db}
}

func (a *bqOrder) List(_ context.Context) (records []model.BqOrder, err error) {
	err = a.db.Find(&records).Error
	return
}

func (a *bqOrder) Save(addRecords []model.BqOrder, upRecords []model.BqOrder, delRecords []model.BqOrder) error {

	if len(addRecords) > 0 {
		err := a.db.Create(&addRecords).Error
		if err != nil {
			return err
		}
	}
	if len(upRecords) > 0 {
		for _, record := range upRecords {
			err := a.db.Model(&record).Where("id = ?", record.ID).Updates(&record).Error
			if err != nil {
				return err
			}
		}
	}
	if len(delRecords) > 0 {
		for _, record := range delRecords {
			err := a.db.Delete(&record).Error
			if err != nil {
				return err
			}
		}
	}
	return nil
}
