#ifndef VIDEO_LAYOUT_VIEW_H
#define VIDEO_LAYOUT_VIEW_H

#include "internal.h"
#include "element.h"

typedef struct layer
{
   char                 *name;
   video_layout_blend_t  blend;

   element_t            *elements;
   int                   elements_count;
} layer_t;

typedef struct view
{
   char                  *name;
   video_layout_bounds_t  bounds;
   video_layout_bounds_t  render_bounds;

   layer_t               *layers;
   int                    layers_count;

   video_layout_bounds_t *screens;
   int                    screens_count;
} view_t;

typedef struct view_array
{
   view_t *views;
   int     views_count;
} view_array_t;

void       layer_init         (layer_t *layer, const char *name);
void       layer_deinit       (layer_t *layer);
element_t *layer_add_element  (layer_t *layer);

void       view_init          (view_t *view, const char *name);
void       view_deinit        (view_t *view);
layer_t   *view_find_layer    (view_t *view, const char *name);
layer_t   *view_emplace_layer (view_t *view, const char *name);
void       view_sort_layers   (view_t *view);
void       view_normalize     (view_t *view);
void       view_count_screens (view_t *view);

void       view_array_init    (view_array_t *view_array, int views_count);
void       view_array_deinit  (view_array_t *view_array);
view_t    *view_array_find    (view_array_t *view_array, const char *name);

#endif