/**
 * Copyright (c) 2021 Dominic Masters
 * 
 * This software is released under the MIT License.
 * https://opensource.org/licenses/MIT
 */

#pragma once
#include "../libs.h"
#include "vntextbox.h"

#define VN_CONVERSATION_TEXT_COUNT_MAX 32

// Type Forwarders

typedef struct _vnconversationtext_t vnconversationtext_t;
typedef struct _vnconversation_t vnconversation_t;

/**
 * Callback for conversation text events.
 * @param conversation Conversation this text is attached to.
 * @param text Text item that is being used in the callback
 */
typedef void vnconversationcallback_t(vnconversation_t *conversation,
  vnconversationtext_t *text
);

typedef struct _vnconversationtext_t {
  /** Pointer to any custom user data for this text action. */
  void *data;

  /** Conversation Type to decide what this data is used for */
  uint8_t type;

  /** Pointer to the string for text to display */
  char *text;

  /** Time in seconds to delay if type is delay */
  float delay;

  /** Callback to fire the moment the text is active in the conversation */
  vnconversationcallback_t *onStart;

  /** Callback to fire every update tick of this conversation element */
  vnconversationcallback_t *onUpdate;

  /** Callback to fire when this conversation element is ended */
  vnconversationcallback_t *onEnd;
} vnconversationtext_t;

/** Representation of a conversation, laid out similarly to a timeline. */
typedef struct _vnconversation_t {
  /** Internal Textbox for text elements */
  vntextbox_t textbox;

  /** Array of text elements */
  vnconversationtext_t texts[VN_CONVERSATION_TEXT_COUNT_MAX];
  uint8_t textCount;

  /** Internal timeline tracking */
  float timeline;

  /** When the current text was first attached */
  float delayStart;

  /** Current index within the array of texts that is currently processing */
  uint8_t textCurrent;
} vnconversation_t;