// 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 stored as PNG.
    Thumbnail []byte
    // A high-res version of the image stored as PNG.
    //Fullsize Blobref
}

// 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{
    FirstName string
    LastName 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
}