package site

import (
	"context"

	"github.com/gocql/gocql"
	"go.uber.org/zap"

	siteusecase "codeberg.org/mapleopentech/monorepo/cloud/maplepress-backend/internal/usecase/site"
)

// VerifySiteService handles site verification operations
type VerifySiteService interface {
	VerifySite(ctx context.Context, tenantID gocql.UUID, siteID gocql.UUID, input *siteusecase.VerifySiteInput) (*siteusecase.VerifySiteOutput, error)
}

type verifySiteService struct {
	verifySiteUC *siteusecase.VerifySiteUseCase
	logger       *zap.Logger
}

// NewVerifySiteService creates a new VerifySiteService
func NewVerifySiteService(
	verifySiteUC *siteusecase.VerifySiteUseCase,
	logger *zap.Logger,
) VerifySiteService {
	return &verifySiteService{
		verifySiteUC: verifySiteUC,
		logger:       logger.Named("verify-site-service"),
	}
}

// ProvideVerifySiteService provides VerifySiteService for dependency injection
func ProvideVerifySiteService(
	verifySiteUC *siteusecase.VerifySiteUseCase,
	logger *zap.Logger,
) VerifySiteService {
	return NewVerifySiteService(verifySiteUC, logger)
}

// VerifySite verifies a site using the verification token
func (s *verifySiteService) VerifySite(
	ctx context.Context,
	tenantID gocql.UUID,
	siteID gocql.UUID,
	input *siteusecase.VerifySiteInput,
) (*siteusecase.VerifySiteOutput, error) {
	s.logger.Info("verifying site",
		zap.String("tenant_id", tenantID.String()),
		zap.String("site_id", siteID.String()))

	return s.verifySiteUC.Execute(ctx, tenantID, siteID, input)
}
