// File Path: monorepo/cloud/maplepress-backend/internal/domain/page/interface.go
package page

import (
	"context"

	"github.com/gocql/gocql"
)

// Repository defines the interface for page data operations
type Repository interface {
	// Create inserts a new page
	Create(ctx context.Context, page *Page) error

	// Update updates an existing page
	Update(ctx context.Context, page *Page) error

	// Upsert creates or updates a page
	Upsert(ctx context.Context, page *Page) error

	// GetByID retrieves a page by site_id and page_id
	GetByID(ctx context.Context, siteID gocql.UUID, pageID string) (*Page, error)

	// GetBySiteID retrieves all pages for a site
	GetBySiteID(ctx context.Context, siteID gocql.UUID) ([]*Page, error)

	// GetBySiteIDPaginated retrieves pages for a site with pagination
	GetBySiteIDPaginated(ctx context.Context, siteID gocql.UUID, limit int, pageState []byte) ([]*Page, []byte, error)

	// Delete deletes a page
	Delete(ctx context.Context, siteID gocql.UUID, pageID string) error

	// DeleteBySiteID deletes all pages for a site
	DeleteBySiteID(ctx context.Context, siteID gocql.UUID) error

	// DeleteMultiple deletes multiple pages by their IDs
	DeleteMultiple(ctx context.Context, siteID gocql.UUID, pageIDs []string) error

	// CountBySiteID counts pages for a site
	CountBySiteID(ctx context.Context, siteID gocql.UUID) (int64, error)

	// Exists checks if a page exists
	Exists(ctx context.Context, siteID gocql.UUID, pageID string) (bool, error)
}
