#ifndef EL__BOOKMARKS_BOOKMARKS_H
#define EL__BOOKMARKS_BOOKMARKS_H

#include "main/module.h"
#include "main/object.h"
#include "util/lists.h"

#ifdef __cplusplus
extern "C" {
#endif

struct listbox_item;
struct terminal;

/* Bookmark record structure */

struct bookmark {
	OBJECT_HEAD(struct bookmark);

	struct bookmark *root;

	struct listbox_item *box_item;

	/** @todo Bug 1066: The bookmark::url string should be in UTF-8 too,
	 * but this has not yet been fully implemented.  */
	unsigned char *title;   /* UTF-8 title of bookmark */
	unsigned char *url;     /* Location of bookmarked item */

	LIST_OF(struct bookmark) child;
};

/* Bookmark lists */

extern LIST_OF(struct bookmark) bookmarks;

/* The bookmarks module */

extern struct module bookmarks_module;

/* Read/write bookmarks functions */

void read_bookmarks(void);
void write_bookmarks(void);

/* Bookmarks manipulation */
void bookmarks_set_dirty(void);
void bookmarks_unset_dirty(void);
int bookmarks_are_dirty(void);

void delete_bookmark(struct bookmark *);
struct bookmark *add_bookmark(struct bookmark *, int, unsigned char *, unsigned char *);
struct bookmark *add_bookmark_cp(struct bookmark *, int, int,
				 unsigned char *, unsigned char *);
struct bookmark *get_bookmark_by_name(struct bookmark *folder,
                                      unsigned char *title);
struct bookmark *get_bookmark(unsigned char *url);
void bookmark_terminal_tabs(struct terminal *term, unsigned char *foldername);
unsigned char *get_auto_save_bookmark_foldername_utf8(void);
void bookmark_auto_save_tabs(struct terminal *term);
int update_bookmark(struct bookmark *, int,
		    unsigned char *, unsigned char *);
void open_bookmark_folder(struct session *ses, unsigned char *foldername);

#ifdef __cplusplus
}
#endif

#endif
