package mysql

import (
	"gorm.io/gorm"

	"github.com/pingcap-inc/it-automation/internal/sync-google-email/model"
)

type authingDepartment struct {
	db *gorm.DB
}

func newAuthingDepartment(ds *datastore) *authingDepartment {
	return &authingDepartment{db: ds.db}
}

func (d *authingDepartment) GetDepartmentByAnyId(s string) (*model.AuthingDepartment, error) {
	var res model.AuthingDepartment
	err := d.db.Where("authingId = ?", s).First(&res).Error
	return &res, dbNotFoundErrorWrap(err)
}

func (d *authingDepartment) SaveDepartments(departments []*model.AuthingDepartment) error {
	tx := d.db.Begin()
	for _, dpt := range departments {
		err := tx.Save(&dpt).Error
		if err != nil {
			tx.Rollback()

			return err
		}
	}
	tx.Commit()

	return nil
}

func (d *authingDepartment) DelDepartments(departments []*model.AuthingDepartment) error {
	tx := d.db.Begin()
	for _, dpt := range departments {
		err := tx.Delete(&dpt).Error
		if err != nil {
			tx.Rollback()

			return err
		}
	}

	tx.Commit()

	return nil
}

func (d *authingDepartment) ListDepartments() (departments []*model.AuthingDepartment, err error) {
	err = d.db.Find(&departments).Error

	return departments, dbNotFoundErrorWrap(err)
}
