package mysql

import (
	"context"

	"gorm.io/gorm"

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

type bqAccount struct {
	db *gorm.DB
}

func newBqAccount(ds *datastore) *bqAccount {
	return &bqAccount{db: ds.db}
}

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

func (a *bqAccount) Save(addRecords []model.BqAccount, upRecords []model.BqAccount, delRecords []model.BqAccount) 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
}
