package repository

import (
	"context"
	"testing"

	"github.com/stretchr/testify/require"

	coremodel "security-center-backend/internal/model"
	caasmmodel "security-center-backend/internal/modules/caasm/model"
)

func TestGormAssetRepositoryPhase4DeletePrivateDomainAssetsForCloudAccount(t *testing.T) {
	ctx := context.Background()
	db := newAssetRepositoryPhase3TestDB(t)
	repo := NewAssetRepository(db)

	accountID := uint64(810)
	otherAccountID := uint64(811)
	asset := caasmmodel.Asset{Base: coremodel.Base{ID: 812}, CloudAccountID: &accountID, NativeID: "asset-812"}
	otherAsset := caasmmodel.Asset{Base: coremodel.Base{ID: 813}, CloudAccountID: &otherAccountID, NativeID: "asset-813"}
	require.NoError(t, db.Create(&asset).Error)
	require.NoError(t, db.Create(&otherAsset).Error)

	domains := []caasmmodel.DomainAsset{
		{Base: coremodel.Base{ID: 820}, AssetID: asset.ID, DomainName: "private.example.test", DomainClass: caasmmodel.DomainClassServiceHostname, ZoneType: "private"},
		{Base: coremodel.Base{ID: 821}, AssetID: asset.ID, DomainName: "public.example.test", DomainClass: caasmmodel.DomainClassServiceHostname, ZoneType: "public"},
		{Base: coremodel.Base{ID: 822}, AssetID: asset.ID, DomainName: "both.example.test", DomainClass: caasmmodel.DomainClassServiceHostname, ZoneType: "public-and-private"},
		{Base: coremodel.Base{ID: 823}, AssetID: otherAsset.ID, DomainName: "other-private.example.test", DomainClass: caasmmodel.DomainClassServiceHostname, ZoneType: "private"},
	}
	require.NoError(t, db.Create(&domains).Error)

	require.NoError(t, repo.DeletePrivateDomainAssetsForCloudAccount(ctx, accountID))

	var remaining []caasmmodel.DomainAsset
	require.NoError(t, db.Order("id ASC").Find(&remaining).Error)
	require.Len(t, remaining, 3)
	require.Equal(t, []uint64{821, 822, 823}, []uint64{remaining[0].ID, remaining[1].ID, remaining[2].ID})
}
