package de.roko.genalogy.downloader.database;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class ArchionDatabaseSetup {

    private static final String DB_FILE = "archion.db";

    public static void main(String[] args) {
        try (Connection conn = DriverManager.getConnection("jdbc:sqlite:" + DB_FILE);
             Statement stmt = conn.createStatement()) {

            stmt.execute("""
                CREATE TABLE IF NOT EXISTS archive (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    bundesland TEXT NOT NULL,
                    name TEXT NOT NULL,
                    link TEXT NOT NULL,
                    UNIQUE(bundesland, name)
                );
            """);

            stmt.execute("""
                CREATE TABLE IF NOT EXISTS kreis (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    archiv_id INTEGER NOT NULL,
                    name TEXT NOT NULL,
                    link TEXT NOT NULL,
                    UNIQUE(archiv_id, name),
                    FOREIGN KEY (archiv_id) REFERENCES archive(id)
                );
            """);

            stmt.execute("""
                CREATE TABLE IF NOT EXISTS ort (
                        id INTEGER PRIMARY KEY AUTOINCREMENT,
                        kreis_id INTEGER,
                        archiv_id INTEGER NOT NULL,
                        name TEXT NOT NULL,
                        link TEXT NOT NULL,
                        UNIQUE(archiv_id, name),
                        FOREIGN KEY (kreis_id) REFERENCES kreis(id),
                        FOREIGN KEY (archiv_id) REFERENCES archive(id)
                    );
            """);

            stmt.execute("""
                CREATE TABLE IF NOT EXISTS buch (
                     id INTEGER PRIMARY KEY AUTOINCREMENT, -- technische ID
                 
                     ort_id INTEGER NOT NULL,              -- Bezug zum Ort
                     titel TEXT NOT NULL,                  -- Titel des Buchs
                     typ TEXT,                             -- Symboltyp (z. B. taufbuch, beerdigungsbuch)
                     zeitraum TEXT,                        -- z. B. 1700–1750
                     enthaelt TEXT,                        -- Zusatzangaben, z. B. auch Konfirmationen
                     anmerkung TEXT,                       -- redaktionelle Hinweise
                     signatur TEXT,                        -- Signatur lokal
                     archivname TEXT,                      -- Archivname aus Detailseite
                     link TEXT NOT NULL,                   -- Detail-Link auf Archion
                     viewer_link TEXT,                     -- direkter Link zum Viewer
                 
                     FOREIGN KEY (ort_id) REFERENCES ort(id),
                     UNIQUE (ort_id, titel) -- wichtig für conflict-handling
                 );
            """);

            stmt.execute("""
                CREATE TABLE IF NOT EXISTS seite (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    buch_id INTEGER NOT NULL,
                    seiten_nr TEXT NOT NULL,
                    FOREIGN KEY (buch_id) REFERENCES buch(id)
                );
            """);

            stmt.execute("""
                CREATE TABLE IF NOT EXISTS bild (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    seite_id INTEGER NOT NULL,
                    url TEXT NOT NULL,
                    ist_gesamtansicht BOOLEAN DEFAULT FALSE,
                    FOREIGN KEY (seite_id) REFERENCES seite(id)
                );
            """);

            System.out.println("✅ Tabellen erfolgreich erstellt in: " + DB_FILE);

        } catch (Exception e) {
            System.err.println("❌ Fehler beim Erstellen der Tabellen: " + e.getMessage());
            e.printStackTrace();
        }
    }
}
