// 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 db

// Deck is the metadata for a set of slides.
type VDeck struct {
    Title string
    Thumbnail []byte
}

// Slide contains the image content for the slide.
type VSlide struct {
    // A low-res version of the image.
    Thumbnail []byte
    // A high-res version of the image.
    // TODO(spetrovic): The type of this field should really be a BlobRef, but we can't reference
    // non-VDLROOT vdl types from Java just yet.
    ImageRef string
}

// Note contains private-to-the-user notes for a specific slide.
type VNote struct {
    Text string
}

// Presentation represents a live display of a Deck.
type VPresentation struct {
    // If the presenter has handed control of the presentation to an audience member,
    // driver will be present.  When the presenter takes back control, this
    // will switch back to the empty string.
    Driver ?VPerson  // ? means optional.
}

// Person represents either an audience member or the presenter.
type VPerson struct{
    Blessing string
    // The person's full name.
    Name string
}

// CurrentSlide contains state for the live presentation.  It is separate from the
// Presentation so that the presenter can temporarily delegate control of the
// CurrentSlide without giving up control of the entire presentation.
type VCurrentSlide struct {
    // The number of the slide that the presenter is talking about.
    Num int32
    // In the future, we could add markup/doodles here.  That markup would be transient
    // if stored here.  Maybe better to put it in a separate row...
}

// Question represents a member of the audience asking a question of the presenter.
// TODO(kash): Add support for the user to type in their question.  Right now, they
// need to ask their question verbally.
type VQuestion struct {
    // The person who asked the question.
    Questioner VPerson
    // Time when the question was asked in milliseconds since the epoch.
    Time int64
    // Track whether this question has been answered.
    Answered bool
}