#ifndef HMML_H_
#define HMML_H_
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#include <stdio.h>

// Data structures

typedef struct {
	char* member;
	char* twitch;
	char* project;
	char* title;
	char* platform;
	char* id;
	char* annotator;
} HMML_VideoMetaData;

typedef struct {
	char* site;
	char* page;
	char* url;
	char* title;
	char* article;
	char* author;
	char* editor;
	char* publisher;
	char* isbn;
	int offset;
} HMML_Reference;

typedef enum {
	HMML_CATEGORY,
	HMML_MEMBER,
	HMML_PROJECT,

	HMML_MARKER_COUNT,
} HMML_MarkerType;

typedef struct {
	HMML_MarkerType type;
	char* text;
	int offset;
} HMML_Marker;

typedef struct {
	int id;
	char* author;
} HMML_Quote;

typedef struct {
	int line;
	char* time;
	char* text;
	char* author;
	
	HMML_Reference* references;
	size_t reference_count;

	HMML_Marker* markers;
	size_t marker_count;

	HMML_Quote quote;
	bool is_quote;
} HMML_Annotation;

typedef struct {
	int line;
	char* message;
} HMML_Error;

typedef struct {
	bool               well_formed;
	HMML_VideoMetaData metadata;
	HMML_Annotation*   annotations;
	size_t             annotation_count;
	HMML_Error         error;
} HMML_Output;

// Functions

HMML_Output hmml_parse_file (FILE* file);
void        hmml_dump       (HMML_Output* output);
void        hmml_free       (HMML_Output* output);

#endif