-- You should not modify if this have pushed to Github, unless it does serious wrong with the db.
BEGIN TRANSACTION;

-- Create new monitor_checks table
create table monitor_checks
(
    id         INTEGER
                    constraint monitor_checks_pk
                    primary key autoincrement,
    type       VARCHAR(50) not null,
    value      TEXT,
    monitor_id INTEGER     not null
);

create unique index monitor_checks_id_uindex
    on monitor_checks (id);


-- Copy over the http status to the new monitor_checks table as a separate check
insert into monitor_checks(monitor_id, type, value)
select id, 'HTTP_STATUS_CODE_SHOULD_EQUAL', accepted_statuscodes_json
from monitor;

-- Copy over the keyword column from the monitor table to the new monitor_checks table as a separate check
insert into monitor_checks(monitor_id, type, value)
select id, 'RESPONSE_SHOULD_CONTAIN_TEXT', keyword
from monitor
WHERE monitor.type = 'keyword';

-- Delete the http status and keyword columns from the monitor table
create table monitor_dg_tmp
(
    id                 INTEGER not null
        primary key autoincrement,
    name               VARCHAR(150),
    active             BOOLEAN  default 1 not null,
    user_id            INTEGER
                               references user
                                   on update cascade on delete set null,
    interval           INTEGER  default 20 not null,
    url                TEXT,
    type               VARCHAR(20),
    weight             INTEGER  default 2000,
    hostname           VARCHAR(255),
    port               INTEGER,
    created_date       DATETIME default (DATETIME('now')) not null,
    maxretries         INTEGER  default 0 not null,
    ignore_tls         BOOLEAN  default 0 not null,
    upside_down        BOOLEAN  default 0 not null,
    maxredirects       INTEGER  default 10 not null,
    dns_resolve_type   VARCHAR(5),
    dns_resolve_server VARCHAR(255),
    dns_last_result    VARCHAR(255),
    retry_interval     INTEGER default 0 not null
);

insert into monitor_dg_tmp(id, name, active, user_id, interval, url, type, weight, hostname, port, created_date, maxretries, ignore_tls, upside_down,
                           maxredirects, dns_resolve_type, dns_resolve_server, dns_last_result, retry_interval)
select id,
       name,
       active,
       user_id,
       interval,
       url,
       type,
       weight,
       hostname,
       port,
       created_date,
       maxretries,
       ignore_tls,
       upside_down,
       maxredirects,
       dns_resolve_type,
       dns_resolve_server,
       dns_last_result,
       retry_interval
from monitor;

drop table monitor;

alter table monitor_dg_tmp
    rename to monitor;

create index user_id
    on monitor (user_id);

UPDATE monitor SET type = 'http' WHERE type = 'keyword';


-- Add foreign key back to monitor_checks
DROP INDEX "monitor_checks_id_uindex";

ALTER TABLE "monitor_checks" RENAME TO "monitor_checks_dg_tmp";

CREATE TABLE "monitor_checks" (
     "id" INTEGER PRIMARY KEY AUTOINCREMENT,
     "type" VARCHAR(50) NOT NULL,
     "value" TEXT,
     "monitor_id" INTEGER NOT NULL,
     CONSTRAINT "monitor_checks_monitor_id_fk"
         FOREIGN KEY ("monitor_id")
             REFERENCES "monitor" ("id")
             ON DELETE CASCADE ON UPDATE CASCADE
);

INSERT INTO "monitor_checks" ("id", "type", "value", "monitor_id")
SELECT "id", "type", "value", "monitor_id" FROM "monitor_checks_dg_tmp";

CREATE UNIQUE INDEX "monitor_checks_id_uindex"
    ON "monitor_checks" (
        "id" ASC
    );

COMMIT;


