package service

import (
	"github.com/tidbcloud/aisupport/services/oncall/db"
	"github.com/tidbcloud/aisupport/services/oncall/models"
	"testing"

	"gorm.io/driver/sqlite"
	"gorm.io/gorm"
)

func setupTeamPermissionDB(t *testing.T) {
	t.Helper()

	var err error
	db.DB, err = gorm.Open(sqlite.Open("file::memory:?cache=shared"), &gorm.Config{})
	if err != nil {
		t.Fatalf("failed to connect sqlite: %v", err)
	}

	err = db.DB.AutoMigrate(&models.Team{}, &models.Engineer{}, &models.EngineerTeam{}, &models.SuperAdmin{})
	if err != nil {
		t.Fatalf("failed to migrate: %v", err)
	}
}

func TestIsTeamManager_SuperAdminHasWritePermission(t *testing.T) {
	setupTeamPermissionDB(t)

	cat := models.Team{Name: "cat1", DisplayName: "cat1"}
	if err := db.DB.Create(&cat).Error; err != nil {
		t.Fatalf("create team: %v", err)
	}
	if err := db.DB.Create(&models.SuperAdmin{Email: "hu.guo@pingcap.com", CreatedBy: "test"}).Error; err != nil {
		t.Fatalf("create super admin: %v", err)
	}

	s := &ScheduleService{}
	ok, err := s.IsTeamManager(cat.ID, "hu.guo@pingcap.com")
	if err != nil {
		t.Fatalf("IsTeamManager err: %v", err)
	}
	if !ok {
		t.Fatalf("expected super admin to be team manager")
	}

	if err := s.EnsureTeamWritePermission(cat.ID, "hu.guo@pingcap.com"); err != nil {
		t.Fatalf("expected write permission for super admin, got err: %v", err)
	}
}
