-- Test Data Database Schema
-- SQLite database for storing and searching test records

-- Main test records table
CREATE TABLE IF NOT EXISTS test_records (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    log_type TEXT NOT NULL,           -- DSCLOG, 5BLOG, 7BLOG, 8BLOG, PWRLOG, SCTLOG, VASLOG, SHT
    model_number TEXT NOT NULL,       -- DSCA38-1793, SCM5B30-01, etc.
    serial_number TEXT NOT NULL,      -- 176923-1, 105840-2, etc.
    test_date TEXT NOT NULL,          -- Test date (YYYY-MM-DD format)
    test_station TEXT,                -- TS-1L, TS-3R, etc.
    overall_result TEXT,              -- PASS/FAIL
    raw_data TEXT,                    -- Full original record
    source_file TEXT,                 -- Original file path
    import_date TEXT DEFAULT (datetime('now')),
    datasheet_exported_at TEXT DEFAULT NULL,
    forweb_exported_at TEXT DEFAULT NULL,
    UNIQUE(log_type, model_number, serial_number, test_date, test_station)
);

-- Indexes for fast searching
CREATE INDEX IF NOT EXISTS idx_serial ON test_records(serial_number);
CREATE INDEX IF NOT EXISTS idx_model ON test_records(model_number);
CREATE INDEX IF NOT EXISTS idx_date ON test_records(test_date);
CREATE INDEX IF NOT EXISTS idx_model_serial ON test_records(model_number, serial_number);
CREATE INDEX IF NOT EXISTS idx_result ON test_records(overall_result);
CREATE INDEX IF NOT EXISTS idx_log_type ON test_records(log_type);

-- Full-text search virtual table
CREATE VIRTUAL TABLE IF NOT EXISTS test_records_fts USING fts5(
    serial_number,
    model_number,
    raw_data,
    content='test_records',
    content_rowid='id'
);

-- Triggers to keep FTS index in sync
CREATE TRIGGER IF NOT EXISTS test_records_ai AFTER INSERT ON test_records BEGIN
    INSERT INTO test_records_fts(rowid, serial_number, model_number, raw_data)
    VALUES (new.id, new.serial_number, new.model_number, new.raw_data);
END;

CREATE TRIGGER IF NOT EXISTS test_records_ad AFTER DELETE ON test_records BEGIN
    INSERT INTO test_records_fts(test_records_fts, rowid, serial_number, model_number, raw_data)
    VALUES ('delete', old.id, old.serial_number, old.model_number, old.raw_data);
END;

CREATE TRIGGER IF NOT EXISTS test_records_au AFTER UPDATE ON test_records BEGIN
    INSERT INTO test_records_fts(test_records_fts, rowid, serial_number, model_number, raw_data)
    VALUES ('delete', old.id, old.serial_number, old.model_number, old.raw_data);
    INSERT INTO test_records_fts(rowid, serial_number, model_number, raw_data)
    VALUES (new.id, new.serial_number, new.model_number, new.raw_data);
END;
