#!/bin/bash

databaseCreateTables() 
{
    if command -v sqlite3 &> /dev/null; then
        setup_table_name=path
        if ! sqlite3 "$docker_dir/$db_file" ".tables" | grep -q "\b$setup_table_name\b"; then
        # Table info here
        local result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (path TEXT);")
        checkSuccess "Creating $setup_table_name table"
        fi

        setup_table_name=sysupdate
        if ! sqlite3 "$docker_dir/$db_file" ".tables" | grep -q "\b$setup_table_name\b"; then
        # Table info here
        local result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (date DATE, time TIME);")
        checkSuccess "Creating $setup_table_name table"
        fi

        setup_table_name=options
        if ! sqlite3 "$docker_dir/$db_file" ".tables" | grep -q "\b$setup_table_name\b"; then
        # Table info here
        local result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (option TEXT UNIQUE, content TEXT);")
        checkSuccess "Creating $setup_table_name table"
        fi

        setup_table_name=apps
        if ! sqlite3 "$docker_dir/$db_file" ".tables" | grep -q "\b$setup_table_name\b"; then
        # Table info here
        # status = 1 = installed, 0 uninstalled
        local result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (name TEXT UNIQUE, status DATE, install_date DATE, install_time TIME, uninstall_date DATE, uninstall_time TIME);")
        checkSuccess "Creating $setup_table_name table"
        fi

        setup_table_name=backups
        if ! sqlite3 "$docker_dir/$db_file" ".tables" | grep -q "\b$setup_table_name\b"; then
        # Table info here
        local result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, date DATE, time TIME);")
        checkSuccess "Creating $setup_table_name table"
        fi

        setup_table_name=restores
        if ! sqlite3 "$docker_dir/$db_file" ".tables" | grep -q "\b$setup_table_name\b"; then
        # Table info here
        local result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, date DATE, time TIME);")
        checkSuccess "Creating $setup_table_name table"
        fi

        setup_table_name=migrations
        if ! sqlite3 "$docker_dir/$db_file" ".tables" | grep -q "\b$setup_table_name\b"; then
        # Table info here
        local result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, date DATE, time TIME);")
        checkSuccess "Creating $setup_table_name table"
        fi

        setup_table_name=ssh
        if ! sqlite3 "$docker_dir/$db_file" ".tables" | grep -q "\b$setup_table_name\b"; then
        # Table info here
        local result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (id INTEGER PRIMARY KEY AUTOINCREMENT, ip TEXT, date DATE, time TIME);")
        checkSuccess "Creating $setup_table_name table"
        fi

        setup_table_name=ssh_keys
        if ! sqlite3 "$docker_dir/$db_file" ".tables" | grep -q "\b$setup_table_name\b"; then
        # Table info here
        local result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (name TEXT UNIQUE, hash TEXT, date DATE, time TIME);")
        checkSuccess "Creating $setup_table_name table"
        fi

        setup_table_name=peers
        if ! sqlite3 "$docker_dir/$db_file" ".tables" | grep -q "\b$setup_table_name\b"; then
        # Named other LibrePortal instances. kind selects the transport:
        #   backup-channel        Phase 1/2 — friendly label over a hostname
        #                         that already shows up in a shared backup repo
        #   direct-ssh-direct     Phase 3 — reachable peer over plain SSH
        #   direct-ssh-via-relay  Phase 3b — peer over Connect's blind relay
        # config_json carries kind-specific knobs (hostname, loc_idx, pubkey
        # fingerprint, relay token, etc.) so adding new kinds doesn't need
        # another schema migration.
        local result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (
            id           INTEGER PRIMARY KEY AUTOINCREMENT,
            name         TEXT UNIQUE NOT NULL,
            kind         TEXT NOT NULL DEFAULT 'backup-channel',
            config_json  TEXT NOT NULL DEFAULT '{}',
            status       TEXT DEFAULT 'unknown',
            last_seen    TEXT,
            created_at   TEXT DEFAULT CURRENT_TIMESTAMP
        );")
        checkSuccess "Creating $setup_table_name table"
        local result=$(sqlite3 "$docker_dir/$db_file" "CREATE INDEX IF NOT EXISTS idx_peers_name ON peers(name);")
        local result=$(sqlite3 "$docker_dir/$db_file" "CREATE INDEX IF NOT EXISTS idx_peers_kind ON peers(kind);")
        fi

        setup_table_name=network_resources
        if ! sqlite3 "$docker_dir/$db_file" ".tables" | grep -q "\b$setup_table_name\b"; then
        # Simple unified network resources table - replaces all complex network tables
        local result=$(sqlite3 $docker_dir/$db_file "CREATE TABLE IF NOT EXISTS $setup_table_name (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            app_name TEXT NOT NULL,
            resource_type TEXT NOT NULL,  -- 'ip' or 'port'
            resource_value TEXT NOT NULL,  -- '172.20.0.10' or '3001'
            service_name TEXT DEFAULT 'main',  -- service within app
            parent_service TEXT DEFAULT NULL,  -- parent Docker service for ports
            status TEXT DEFAULT 'active',
            created_date DATE DEFAULT CURRENT_DATE,
            created_time TIME DEFAULT CURRENT_TIME,
            UNIQUE(app_name, resource_type, service_name),
            UNIQUE(resource_type, resource_value)
        );")
        checkSuccess "Creating unified network_resources table"
        
        # Create simple indexes for performance
        local result=$(sqlite3 "$docker_dir/$db_file" "CREATE INDEX IF NOT EXISTS idx_network_resources_app ON network_resources(app_name);")
        checkSuccess "Creating network resources app index"
        local result=$(sqlite3 "$docker_dir/$db_file" "CREATE INDEX IF NOT EXISTS idx_network_resources_type ON network_resources(resource_type);")
        checkSuccess "Creating network resources type index"
        local result=$(sqlite3 "$docker_dir/$db_file" "CREATE INDEX IF NOT EXISTS idx_network_resources_value ON network_resources(resource_value);")
        checkSuccess "Creating network resources value index"
        local result=$(sqlite3 "$docker_dir/$db_file" "CREATE INDEX IF NOT EXISTS idx_network_resources_status ON network_resources(status);")
        checkSuccess "Creating network resources status index"
        local result=$(sqlite3 "$docker_dir/$db_file" "CREATE INDEX IF NOT EXISTS idx_network_resources_parent_service ON network_resources(parent_service);")
        checkSuccess "Creating network resources parent service index"
        fi
    else
        echo "SQLite3 is not installed. Skipping table creation."
    fi
}
