-- Schéma SQLite pour annotations de mutations génomiques
-- Simple, modulaire, optimisé pour ML
-- Convention chromosomes: 1-22 (autosomes), 23=X, 24=Y

-- Table centrale des mutations
CREATE TABLE mutations (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    chrom INTEGER NOT NULL,         -- 1-22, 23=X, 24=Y
    pos INTEGER NOT NULL,
    ref TEXT NOT NULL,
    alt TEXT NOT NULL,
    UNIQUE(chrom, pos, ref, alt)
);
CREATE INDEX idx_mutations_location ON mutations(chrom, pos);

-- Table des gènes (depuis GTF canonique)
CREATE TABLE genes (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    gene_id TEXT NOT NULL UNIQUE,  -- ENSG...
    gene_name TEXT,                 -- Symbole (ex: TP53)
    chrom INTEGER NOT NULL,         -- 1-22, 23=X, 24=Y
    start INTEGER NOT NULL,         -- Start du gène
    end INTEGER NOT NULL,           -- End du gène
    strand TEXT NOT NULL,           -- + ou -
    tss INTEGER NOT NULL            -- Transcription Start Site (pour promoteur)
);
CREATE INDEX idx_genes_location ON genes(chrom, start, end);
CREATE INDEX idx_genes_name ON genes(gene_name);

-- Table des features génomiques (depuis GTF)
-- Stocke les coordonnées permanentes des exons, introns, UTRs, promoteurs
CREATE TABLE genomic_features (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    gene_id INTEGER NOT NULL,
    annotation_type TEXT NOT NULL,      -- 'exon', 'intron', 'UTR5', 'UTR3', 'promoter'
    feature_start INTEGER NOT NULL,
    feature_end INTEGER NOT NULL,
    transcript_id TEXT,                 -- ID du transcript canonique
    FOREIGN KEY (gene_id) REFERENCES genes(id) ON DELETE CASCADE
);
CREATE INDEX idx_genomic_features_gene ON genomic_features(gene_id);
CREATE INDEX idx_genomic_features_location ON genomic_features(feature_start, feature_end);

-- Table de liaison: mutation <-> genomic_feature
-- Une mutation peut toucher plusieurs features (ex: exon de 2 gènes chevauchants)
CREATE TABLE mutation_annotations (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    mutation_id INTEGER NOT NULL,
    feature_id INTEGER,                 -- NULL si intergenic
    FOREIGN KEY (mutation_id) REFERENCES mutations(id) ON DELETE CASCADE,
    FOREIGN KEY (feature_id) REFERENCES genomic_features(id) ON DELETE CASCADE,
    UNIQUE(mutation_id, feature_id)     -- Éviter les doublons
);
CREATE INDEX idx_mutation_annotations_mutation ON mutation_annotations(mutation_id);
CREATE INDEX idx_mutation_annotations_feature ON mutation_annotations(feature_id);
