package repository

import (
	"context"
	"time"

	"apskel-pos-be/internal/entities"

	"github.com/google/uuid"
)

// TableRepositoryInterface defines the interface for table repository operations
type TableRepositoryInterface interface {
	Create(ctx context.Context, table *entities.Table) error
	GetByID(ctx context.Context, id uuid.UUID) (*entities.Table, error)
	GetByOutletID(ctx context.Context, outletID uuid.UUID) ([]entities.Table, error)
	GetByOrganizationID(ctx context.Context, organizationID uuid.UUID) ([]entities.Table, error)
	Update(ctx context.Context, table *entities.Table) error
	Delete(ctx context.Context, id uuid.UUID) error
	List(ctx context.Context, organizationID, outletID *uuid.UUID, status *string, isActive *bool, search string, page, limit int) ([]entities.Table, int64, error)
	GetAvailableTables(ctx context.Context, outletID uuid.UUID) ([]entities.Table, error)
	GetOccupiedTables(ctx context.Context, outletID uuid.UUID) ([]entities.Table, error)
	OccupyTable(ctx context.Context, tableID, orderID uuid.UUID, startTime *time.Time) error
	ReleaseTable(ctx context.Context, tableID uuid.UUID, paymentAmount float64) error
	GetByOrderID(ctx context.Context, orderID uuid.UUID) (*entities.Table, error)
}
