-- Before reordering remember to update the constants in header file

CREATE TABLE IF NOT EXISTS `places` (
`id` TEXT PRIMARY KEY,
`latitude` DOUBLE NOT NULL,
`longitude` DOUBLE NOT NULL,
`altitude` DOUBLE NULL,
`name` TEXT NOT NULL,
`icon` TEXT,
`haccuracy` DOUBLE,
`vaccuracy` DOUBLE,
`comment` TEXT,
`description` TEXT, 
`coverage` DOUBLE,
`presence` TEXT,
`ctime` INTEGER NOT NULL
);

-- Well-known id is meant for localized, preinstalled categories.
CREATE TABLE IF NOT EXISTS `categories` (
`id` TEXT PRIMARY KEY,
`name` TEXT NOT NULL,
`description` TEXT,
`well-known-id` TEXT NULL
);

CREATE TABLE IF NOT EXISTS `p2c` (
`place_id` TEXT,
`category_id` TEXT
);

CREATE TABLE IF NOT EXISTS `images` (
`id` TEXT,
`description` TEXT,
`filename` TEXT
);

CREATE TABLE IF NOT EXISTS `p2i` (
`place_id` TEXT,
`image_id` TEXT
);

CREATE TABLE IF NOT EXISTS `places_appdata` (
`place_id` TEXT,
`key` TEXT,
`data` TEXT
);

CREATE TABLE IF NOT EXISTS `places_address` (
`place_id` TEXT,
`country` TEXT,
`country_code` TEXT,
`state` TEXT,
`county` TEXT,
`city` TEXT,
`district` TEXT,
`postcode` TEXT,
`crossing1` TEXT,
`crossing2` TEXT,
`street` TEXT,
`building_name` TEXT,
`building_zone` TEXT,
`building_floor` TEXT,
`building_room` TEXT,
`extension` TEXT,
`phone_number` TEXT
);

-- FIXME: We should allow binding links both to places and routes?
CREATE TABLE IF NOT EXISTS `places_links` (
`link_id` TEXT,
`place_id` TEXT,
`name` TEXT,
`mime` TEXT,
`url` TEXT
);

-- Type field selects between route and track when exporting
CREATE TABLE IF NOT EXISTS `routes` (
`id` TEXT PRIMARY KEY,
`name` TEXT NOT NULL,
`comment` TEXT,
`description` TEXT,
`type` TEXT NULL
);

CREATE TABLE IF NOT EXISTS `waypoints` (
`id` TEXT PRIMARY KEY,
`route_id` TEXT NOT NULL,
`name` TEXT NULL,
`desc` TEXT NULL,
`sym` TEXT NULL,
`type` TEXT NULL,
`order_weight` DOUBLE,
`latitude` DOUBLE NOT NULL,
`longitude` DOUBLE NOT NULL,
`altitude` DOUBLE NULL,
`segment_end` INTEGER NULL,
`ctime` INTEGER
);

-- Non-waypoint locations related to the route
CREATE TABLE IF NOT EXISTS `r2p` (
`route_id` TEXT,
`place_id` TEXT
);

-- When deleting a route, automatically drop all
-- waypoints and POIs that are related to the route.
CREATE TRIGGER IF NOT EXISTS `route_deleted` DELETE ON `routes`
BEGIN
  DELETE FROM `waypoints` WHERE route_id = OLD.id;
  DELETE FROM `r2p` WHERE route_id = OLD.id;
END;

-- When deleting an image, remove all references from p2i
CREATE TRIGGER IF NOT EXISTS `image_deleted` DELETE ON `images`
BEGIN
  DELETE FROM `p2i` WHERE image_id = OLD.id;
END;

-- When deleting a place, we need to remove lot of things...
CREATE TRIGGER IF NOT EXISTS `place_deleted` DELETE ON `places`
BEGIN
  DELETE FROM `p2i` WHERE place_id = OLD.id;
  DELETE FROM `p2c` WHERE place_id = OLD.id;
  DELETE FROM `places_appdata` WHERE place_id = OLD.id;
  DELETE FROM `places_address` WHERE place_id = OLD.id;
  DELETE FROM `places_links` WHERE place_id = OLD.id;
END;

-- When deleting a category, drop the links to places
CREATE TRIGGER IF NOT EXISTS `category_deleted` DELETE ON `categories`
BEGIN
  DELETE FROM `p2c` WHERE category_id = OLD.id;
END;

-- Automatically select sorting weight and timestamp if not specified
CREATE TRIGGER IF NOT EXISTS `waypoint_auto_fill` AFTER INSERT ON `waypoints`
BEGIN
  UPDATE `waypoints` SET order_weight = ifnull((SELECT max(order_weight)+1 FROM waypoints),1) WHERE id = NEW.id AND NEW.order_weight ISNULL;
  UPDATE `waypoints` SET ctime = strftime('%s', 'now') WHERE id = NEW.id AND NEW.ctime ISNULL;
END;
