package organizationdb

import (
	"context"

	"github.com/tech/sendico/pkg/auth"
	"github.com/tech/sendico/pkg/db/policy"
	"github.com/tech/sendico/pkg/mlogger"
	"github.com/tech/sendico/pkg/model"
	"github.com/tech/sendico/pkg/mservice"
	"go.mongodb.org/mongo-driver/v2/mongo"
)

type OrganizationDB struct {
	auth.ProtectedDBImp[*model.Organization]
}

func Create(ctx context.Context,
	logger mlogger.Logger,
	enforcer auth.Enforcer,
	pdb policy.DB,
	db *mongo.Database,
) (*OrganizationDB, error) {
	p, err := auth.CreateDBImp[*model.Organization](ctx, logger, pdb, enforcer, mservice.Organizations, db)
	if err != nil {
		return nil, err
	}

	res := &OrganizationDB{
		ProtectedDBImp: *p,
	}
	p.DBImp.SetDeleter(res.DeleteCascade)
	return res, nil
}
