-- ================================
-- ESTREKA KALENDRIMOODULI ANDMEBAAS
-- ================================
-- Versioon: 1.0
-- Kuupäev: 2025-06-11
-- Autor: Estreka Team
--
-- KASUTAMINE:
-- 1. Kopeeri see kood oma database.php faili või käivita eraldi
-- 2. Tabelid luuakse automaatselt, kui neid pole
-- 3. Põhilised kategooriad lisatakse automaatselt
--
-- JÄRGMISED SAMMUD:
-- - Lisa calendar.php pealeht
-- - Loo API endpoint failid /calendar/api/ kaustas
-- - Integreeri peamenüüsse
-- ================================

-- =======================
-- 1. SÜNDMUSTE KATEGOORIAD
-- =======================
-- Kasutajad saavad luua oma kategooriaid
-- Iga kategoorial on värv, ikoon ja vaikimisi meeldetuletuse aeg
CREATE TABLE IF NOT EXISTS event_categories (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id INTEGER NOT NULL,              -- Kellele kuulub (või NULL = kõigile)
    name VARCHAR(100) NOT NULL,            -- Kategooria nimi
    color VARCHAR(7) DEFAULT '#3B82F6',    -- Hex värv (#RRGGBB)
    icon VARCHAR(50) DEFAULT '📅',         -- Emoji või CSS klass
    default_reminder_minutes INTEGER DEFAULT 60,  -- Vaikimisi meeldetuletus minutites
    is_system INTEGER DEFAULT 0,          -- 1 = süsteemi kategooria, 0 = kasutaja oma
    is_active INTEGER DEFAULT 1,          -- Kas aktiivsena näidata
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);

-- =================
-- 2. SÜNDMUSED
-- =================
-- Põhiline sündmuste tabel
CREATE TABLE IF NOT EXISTS events (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id INTEGER NOT NULL,                    -- Kellele kuulub
    category_id INTEGER,                         -- Kategooria (võib olla NULL)
    title VARCHAR(255) NOT NULL,                 -- Sündmuse pealkiri
    description TEXT,                            -- Kirjeldus (valikuline)
    start_datetime DATETIME NOT NULL,            -- Algus aeg
    end_datetime DATETIME,                       -- Lõpu aeg (valikuline)
    location VARCHAR(255),                       -- Asukoht (valikuline)
    all_day INTEGER DEFAULT 0,                  -- 1 = terve päev, 0 = kindel aeg
    is_recurring INTEGER DEFAULT 0,             -- Korduv sündmus (tulevikus)
    recurring_pattern VARCHAR(100),             -- Kordumise muster (tulevikus)
    reminder_sent INTEGER DEFAULT 0,            -- Kas meeldetuletus saadetud
    is_completed INTEGER DEFAULT 0,             -- Kas täidetud (ülesannete jaoks)
    priority INTEGER DEFAULT 0,                 -- Prioriteet (0=madal, 1=keskmine, 2=kõrge)
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
    FOREIGN KEY (category_id) REFERENCES event_categories(id) ON DELETE SET NULL
);

-- ========================
-- 3. MEELDETULETUSED
-- ========================
-- Sündmuste meeldetuletused (saab mitu ühele sündmusele)
CREATE TABLE IF NOT EXISTS event_reminders (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    event_id INTEGER NOT NULL,                  -- Milline sündmus
    reminder_datetime DATETIME NOT NULL,        -- Millal meeldetuletada
    message TEXT,                               -- Kohandatud sõnum
    method VARCHAR(20) DEFAULT 'browser',       -- Meetod: browser, email (tulevikus SMS)
    is_sent INTEGER DEFAULT 0,                 -- Kas saadetud
    sent_at DATETIME,                           -- Millal saadetud
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (event_id) REFERENCES events(id) ON DELETE CASCADE
);

-- ============================
-- 4. KALENDRI SEADED
-- ============================
-- Kasutaja kalendri personaalsed seaded
CREATE TABLE IF NOT EXISTS calendar_settings (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id INTEGER NOT NULL UNIQUE,           -- Iga kasutaja kohta üks rida
    default_view VARCHAR(20) DEFAULT 'month',  -- Vaikimisi vaade: month, week, day, year
    week_start INTEGER DEFAULT 1,              -- Nädala algus (1=esmaspäev, 0=pühapäev)
    work_hours_start TIME DEFAULT '08:00',     -- Tööpäeva algus
    work_hours_end TIME DEFAULT '18:00',       -- Tööpäeva lõpp
    show_weekends INTEGER DEFAULT 1,           -- Näita nädalavahetusi
    timezone VARCHAR(50) DEFAULT 'Europe/Tallinn',
    notification_sound INTEGER DEFAULT 1,      -- Heli meeldetuletustel
    email_reminders INTEGER DEFAULT 0,         -- E-mail meeldetuletused lubatud
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);

-- ===============================
-- 5. VAIKIMISI ANDMETE LISAMINE
-- ===============================

-- Lisa süsteemi kategooriad (kõigile kasutajatele nähtavad)
INSERT OR IGNORE INTO event_categories (user_id, name, color, icon, default_reminder_minutes, is_system) VALUES
(NULL, 'Treening', '#10B981', '🏃', 60, 1),
(NULL, 'Võistlus', '#F59E0B', '🏆', 120, 1),
(NULL, 'Koosolek', '#3B82F6', '💼', 30, 1),
(NULL, 'Üritus', '#8B5CF6', '🎉', 60, 1),
(NULL, 'Õppimine', '#06B6D4', '📚', 30, 1),
(NULL, 'Arst', '#EF4444', '🏥', 60, 1),
(NULL, 'Isiklik', '#6B7280', '👤', 30, 1),
(NULL, 'Töö', '#1F2937', '💻', 30, 1);

-- ===============================
-- 6. INDEKSID KIIRUSE JAOKS
-- ===============================
CREATE INDEX IF NOT EXISTS idx_events_user_date ON events(user_id, start_datetime);
CREATE INDEX IF NOT EXISTS idx_events_category ON events(category_id);
CREATE INDEX IF NOT EXISTS idx_reminders_datetime ON event_reminders(reminder_datetime, is_sent);
CREATE INDEX IF NOT EXISTS idx_events_recurring ON events(is_recurring);

-- ===============================
-- 7. KASUTAMISJUHEND
-- ===============================
/*
KUIDAS KASUTADA:

1. TABELITE LOOMINE:
   - Kopeeri see kood oma database.php faili või käivita eraldi
   - Tabelid luuakse automaatselt olemasoleva süsteemi kõrvale

2. KATEGOORIAD:
   - Süsteemi kategooriad on juba loodud
   - Kasutajad saavad lisada oma kategooriaid
   - Igal kategoorial on värv ja ikoon

3. SÜNDMUSED:
   - Saab luua ühe või mitmepäevaseid sündmusi
   - Võib olla seotud kategooriaga või mitte
   - Automaatne meeldetuletuste süsteem

4. JÄRGMISED SAMMUD:
   - Loo calendar.php põhifail
   - Loo API endpoint failid
   - Integreeri peamenüüsse
   - Lisa frontend JavaScript

NÄITED:

-- Lisa uus sündmus:
INSERT INTO events (user_id, category_id, title, start_datetime, end_datetime) 
VALUES (1, 1, 'Hommikune jooks', '2025-06-12 07:00:00', '2025-06-12 08:00:00');

-- Lisa kohandatud kategooria:
INSERT INTO event_categories (user_id, name, color, icon) 
VALUES (1, 'Minu treening', '#FF6B6B', '💪');

-- Otsi kasutaja sündmusi:
SELECT e.*, c.name as category_name, c.color, c.icon 
FROM events e 
LEFT JOIN event_categories c ON e.category_id = c.id 
WHERE e.user_id = 1 AND DATE(e.start_datetime) = '2025-06-12';
*/