/*
 * Copyright (C) 2018 Richard Hughes <richard@hughsie.com>
 *
 * SPDX-License-Identifier: LGPL-2.1+
 */

#pragma once

#include <gio/gio.h>

#include "xb-builder-fixup.h"
#include "xb-builder-source.h"
#include "xb-builder-node.h"
#include "xb-silo.h"

G_BEGIN_DECLS

#define XB_TYPE_BUILDER (xb_builder_get_type ())

G_DECLARE_DERIVABLE_TYPE (XbBuilder, xb_builder, XB, BUILDER, GObject)

struct _XbBuilderClass {
	GObjectClass			 parent_class;
	/*< private >*/
	void (*_xb_reserved1)		(void);
	void (*_xb_reserved2)		(void);
	void (*_xb_reserved3)		(void);
	void (*_xb_reserved4)		(void);
	void (*_xb_reserved5)		(void);
	void (*_xb_reserved6)		(void);
	void (*_xb_reserved7)		(void);
};

/**
 * XbBuilderCompileFlags:
 * @XB_BUILDER_COMPILE_FLAG_NONE:		No extra flags to use
 * @XB_BUILDER_COMPILE_FLAG_NATIVE_LANGS:	Only load native languages
 * @XB_BUILDER_COMPILE_FLAG_IGNORE_INVALID:	Ignore invalid files without an error
 * @XB_BUILDER_COMPILE_FLAG_SINGLE_LANG:	Only store a single language
 * @XB_BUILDER_COMPILE_FLAG_WATCH_BLOB:		Watch the XMLB file for changes
 * @XB_BUILDER_COMPILE_FLAG_IGNORE_GUID:	Ignore the cache GUID value
 *
 * The flags for converting to XML.
 **/
typedef enum {
	XB_BUILDER_COMPILE_FLAG_NONE		= 0,		/* Since: 0.1.0 */
	XB_BUILDER_COMPILE_FLAG_NATIVE_LANGS	= 1 << 1,	/* Since: 0.1.0 */
	XB_BUILDER_COMPILE_FLAG_IGNORE_INVALID	= 1 << 2,	/* Since: 0.1.0 */
	XB_BUILDER_COMPILE_FLAG_SINGLE_LANG	= 1 << 3,	/* Since: 0.1.0 */
	XB_BUILDER_COMPILE_FLAG_WATCH_BLOB	= 1 << 4,	/* Since: 0.1.0 */
	XB_BUILDER_COMPILE_FLAG_IGNORE_GUID	= 1 << 5,	/* Since: 0.1.7 */
	/*< private >*/
	XB_BUILDER_COMPILE_FLAG_LAST
} XbBuilderCompileFlags;

XbBuilder	*xb_builder_new			(void);
void		 xb_builder_append_guid		(XbBuilder		*self,
						 const gchar		*guid);
void		 xb_builder_import_source	(XbBuilder		*self,
						 XbBuilderSource	*source);
void		 xb_builder_import_node		(XbBuilder		*self,
						 XbBuilderNode		*bn);
XbSilo		*xb_builder_compile		(XbBuilder		*self,
						 XbBuilderCompileFlags	 flags,
						 GCancellable		*cancellable,
						 GError			**error);
XbSilo		*xb_builder_ensure		(XbBuilder		*self,
						 GFile			*file,
						 XbBuilderCompileFlags	 flags,
						 GCancellable		*cancellable,
						 GError			**error);
void		 xb_builder_add_locale		(XbBuilder		*self,
						 const gchar		*locale);
void		 xb_builder_add_fixup		(XbBuilder		*self,
						 XbBuilderFixup		*fixup);
void		 xb_builder_set_profile_flags	(XbBuilder		*self,
						 XbSiloProfileFlags	 profile_flags);

G_END_DECLS
