use oxibase::api::Database;
use oxibase::Value;
pub fn install(db: &Database) {
println!("Installing Workspace app into database...");
let mut tx = db.begin().expect("Failed to start transaction");
let _ = tx.execute("CREATE SCHEMA IF NOT EXISTS interface", ());
let _ = tx.execute(
"CREATE TABLE IF NOT EXISTS interface.routes (method TEXT, path TEXT, template_name TEXT, context_query TEXT)",
(),
);
let _ = tx.execute(
"CREATE TABLE IF NOT EXISTS interface.templates (name TEXT, content TEXT)",
(),
);
let _ = tx.execute(
"CREATE TABLE IF NOT EXISTS interface.templates (name TEXT, content TEXT)",
(),
);
let _ = tx.execute("DELETE FROM interface.routes", ());
let _ = tx.execute("DELETE FROM interface.templates", ());
let layout_html = include_str!("templates/workspace_layout.html");
let sidebar_data_html = include_str!("templates/workspace_sidebar_data.html");
let sidebar_compute_html = include_str!("templates/workspace_sidebar_compute.html");
let sidebar_observe_html = include_str!("templates/workspace_sidebar_observe.html");
let editor_html = include_str!("templates/workspace_sql_editor.html");
let results_html = include_str!("templates/workspace_sql_results.html");
let table_create_html = include_str!("templates/workspace_table_create.html");
let data_grid_html = include_str!("templates/workspace_data_grid.html");
let trace_view_html = include_str!("templates/workspace_trace_view.html");
let _ = tx.execute(
"INSERT INTO interface.templates (name, content) VALUES ('workspace_layout.html', ?)",
vec![Value::text(layout_html)],
);
let _ = tx.execute(
"INSERT INTO interface.templates (name, content) VALUES ('workspace_sidebar_data.html', ?)",
vec![Value::text(sidebar_data_html)],
);
let _ = tx.execute(
"INSERT INTO interface.templates (name, content) VALUES ('workspace_sidebar_compute.html', ?)",
vec![Value::text(sidebar_compute_html)],
);
let _ = tx.execute(
"INSERT INTO interface.templates (name, content) VALUES ('workspace_sidebar_observe.html', ?)",
vec![Value::text(sidebar_observe_html)],
);
let _ = tx.execute(
"INSERT INTO interface.templates (name, content) VALUES ('workspace_sql_editor.html', ?)",
vec![Value::text(editor_html)],
);
let _ = tx.execute(
"INSERT INTO interface.templates (name, content) VALUES ('workspace_sql_results.html', ?)",
vec![Value::text(results_html)],
);
let _ = tx.execute(
"INSERT INTO interface.templates (name, content) VALUES ('workspace_table_create.html', ?)",
vec![Value::text(table_create_html)],
);
let _ = tx.execute(
"INSERT INTO interface.templates (name, content) VALUES ('workspace_data_grid.html', ?)",
vec![Value::text(data_grid_html)],
);
let _ = tx.execute(
"INSERT INTO interface.templates (name, content) VALUES ('workspace_trace_view.html', ?)",
vec![Value::text(trace_view_html)],
);
let _ = tx.execute(
"INSERT INTO interface.routes (method, path, template_name, context_query) VALUES ('GET', '/workspace', 'workspace_layout.html', NULL)",
()
);
let _ = tx.execute(
"INSERT INTO interface.routes (method, path, template_name, context_query) VALUES ('GET', '/workspace/sidebar/data', 'workspace_sidebar_data.html', 'SELECT table_schema, table_name FROM information_schema.tables ORDER BY table_schema, table_name')",
()
);
let _ = tx.execute(
"INSERT INTO interface.routes (method, path, template_name, context_query) VALUES ('GET', '/workspace/sidebar/compute', 'workspace_sidebar_compute.html', NULL)",
()
);
let _ = tx.execute(
"INSERT INTO interface.routes (method, path, template_name, context_query) VALUES ('GET', '/workspace/sidebar/observe', 'workspace_sidebar_observe.html', NULL)",
()
);
let _ = tx.execute(
"INSERT INTO interface.routes (method, path, template_name, context_query) VALUES ('GET', '/workspace/sql_editor', 'workspace_sql_editor.html', NULL)",
()
);
let _ = tx.execute(
"INSERT INTO interface.routes (method, path, template_name, context_query) VALUES ('GET', '/workspace/meta/tables/new', 'workspace_table_create.html', NULL)",
()
);
tx.commit().expect("Failed to commit transaction");
println!("Workspace installation complete.");
}