package store

import (
	"context"

	storepb "github.com/yourselfhosted/slash/proto/gen/store"
)

type UpdateCollection struct {
	ID          int32
	Name        *string
	Link        *string
	Title       *string
	Description *string
	ShortcutIDs []int32
	Visibility  *storepb.Visibility
}

type FindCollection struct {
	ID             *int32
	CreatorID      *int32
	Name           *string
	VisibilityList []storepb.Visibility
}

type DeleteCollection struct {
	ID int32
}

func (s *Store) CreateCollection(ctx context.Context, create *storepb.Collection) (*storepb.Collection, error) {
	return s.driver.CreateCollection(ctx, create)
}

func (s *Store) UpdateCollection(ctx context.Context, update *UpdateCollection) (*storepb.Collection, error) {
	return s.driver.UpdateCollection(ctx, update)
}

func (s *Store) ListCollections(ctx context.Context, find *FindCollection) ([]*storepb.Collection, error) {
	return s.driver.ListCollections(ctx, find)
}

func (s *Store) GetCollection(ctx context.Context, find *FindCollection) (*storepb.Collection, error) {
	collections, err := s.ListCollections(ctx, find)
	if err != nil {
		return nil, err
	}

	if len(collections) == 0 {
		return nil, nil
	}

	collection := collections[0]
	return collection, nil
}

func (s *Store) DeleteCollection(ctx context.Context, delete *DeleteCollection) error {
	return s.driver.DeleteCollection(ctx, delete)
}
