// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package nosql

import (
	wire "v.io/syncbase/v23/services/syncbase/nosql"
	"v.io/v23/context"
)

// NewSchema creates a new Schema object.
func NewSchema(metadata wire.SchemaMetadata, upgrader SchemaUpgrader) *Schema {
	return &Schema{
		Metadata: metadata,
		Upgrader: upgrader,
	}
}

//////////////////////////////////////////
// Implementation of SchemaManager (Not part of public client API)

type schemaManagerImpl struct {
	dbName string
	c      wire.DatabaseClientMethods
}

func newSchemaManager(dbName string) schemaManagerImpl {
	return schemaManagerImpl{
		dbName: dbName,
		c:      wire.DatabaseClient(dbName),
	}
}

// GetSchemaMetadata retrieves the schema metadata for the database it is
// derived from.
func (sm *schemaManagerImpl) getSchemaMetadata(ctx *context.T) (wire.SchemaMetadata, error) {
	return sm.c.GetSchemaMetadata(ctx)
}

// SetSchemaMetadata stores the schema metadata for the database it is
// derived from.
func (sm *schemaManagerImpl) setSchemaMetadata(ctx *context.T, metadata wire.SchemaMetadata) error {
	return sm.c.SetSchemaMetadata(ctx, metadata)
}
