#ifndef __edl__edl_h
#define __edl__edl_h

#ifdef __cplusplus
extern "C" {
#endif

#include <stdbool.h> /* C99 required */
#include <stddef.h>

typedef enum {
	MEDIATYPE_VIDEO,
	MEDIATYPE_AUDIO,
	MEDIATYPE_UNKNOWN
} EDL_media_type_t;

typedef enum {
	EDL_PARSE_ERROR_SUCCESS = 0,
	EDL_PARSE_ERROR_OUT_OF_MEMORY
} EDL_parse_error_t;

typedef struct {
	int id;
	int track;
	double start_time;
	double length;
	double play_rate;
	bool locked;
	bool normalized;
	int stretch_method;
	bool looped;
	bool on_ruler;
	EDL_media_type_t media_type;
	char* filename;
	int stream;
	double stream_start;
	double stream_length;
	double fade_time_in;
	double fade_time_out;
	double sustain_gain;
	int curve_in;
	double gain_in;
	int curve_out;
	double gain_out;
	int layer;
	int color;
	int curve_in_r;
	int curve_out_r;
	double play_pitch;
	bool lock_pitch;
	int first_channel;
	int channels;
} EDL_line;

typedef struct {
	EDL_line* arr;
	size_t capacity;
	size_t size;
} EDL;

EDL_parse_error_t EDL_parse(EDL* edl, const char* text, size_t length);
int EDL_reallocate(EDL* edl, size_t new_capacity);
char* EDL_dump(const EDL* edl);
void EDL_free(EDL* edl);

#ifdef __cplusplus
}
#endif

#endif
