-- =====================================================
-- PAGE EXPLORER - HİBRİT YAKLAŞIM TABLOLARI
-- =====================================================
-- Tarih: 2024-12-03
-- Amaç: PDF sayfalarını lazy loading ile analiz etme
-- =====================================================

-- -----------------------------------------------------
-- TABLO 1: pdf_page_index
-- Amaç: PDF'in sayfa haritası (hızlı, düşük maliyetli)
-- Ne zaman: PDF ilk açıldığında (bir kez)
-- Maliyet: ~$0.01 per PDF
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS pdf_page_index (
    id INT AUTO_INCREMENT PRIMARY KEY,
    
    -- PDF tanımlayıcı
    pdf_path VARCHAR(500) NOT NULL,
    pdf_hash VARCHAR(64) NOT NULL COMMENT 'PDF içerik hash (değişiklik tespiti)',
    
    -- Genel bilgiler
    total_pages INT NOT NULL,
    content_pages INT NOT NULL COMMENT 'Boş olmayan sayfa sayısı',
    
    -- Sayfa listesi (JSON array)
    -- Format: [{"p":1,"t":"cover","h":"Title"},...]
    page_list JSON NOT NULL,
    
    -- İstatistikler
    page_types JSON COMMENT '{"diagram":50,"procedure":30,"table":20,...}',
    
    -- API kullanımı
    model_used VARCHAR(50) DEFAULT 'gemini-2.5-flash',
    input_tokens INT,
    output_tokens INT,
    cost_usd DECIMAL(10,6),
    duration_ms INT,
    
    -- Meta
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    created_by INT COMMENT 'İlk analiz eden kullanıcı',
    
    -- Index
    UNIQUE KEY idx_pdf_path (pdf_path(255)),
    INDEX idx_pdf_hash (pdf_hash),
    INDEX idx_created (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- -----------------------------------------------------
-- TABLO 2: pdf_page_details
-- Amaç: Tek sayfa detaylı analizi (kullanıcı istediğinde)
-- Ne zaman: Kullanıcı sayfayı görüntülediğinde
-- Maliyet: ~$0.0002 per sayfa
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS pdf_page_details (
    id INT AUTO_INCREMENT PRIMARY KEY,
    
    -- PDF ve sayfa
    pdf_path VARCHAR(500) NOT NULL,
    page_number INT NOT NULL,
    
    -- Analiz sonuçları
    page_type ENUM('cover','toc','intro','diagram','table','procedure','fault','spec','parts','other') NOT NULL,
    title VARCHAR(255),
    
    -- Detaylı içerik
    summary TEXT COMMENT 'Sayfa özeti (2-3 cümle)',
    detailed_content TEXT COMMENT 'Detaylı açıklama',
    
    -- Yapısal veriler (JSON)
    key_info JSON COMMENT '["parça no: ABC123", "tork: 50Nm", ...]',
    fault_codes JSON COMMENT '[{"code":"E01","desc":"...","solution":"..."}]',
    part_numbers JSON COMMENT '["ABC-123", "DEF-456"]',
    specifications JSON COMMENT '[{"name":"Basınç","value":"35MPa"}]',
    warnings JSON COMMENT '["DİKKAT: Sıcak yüzey"]',
    
    -- Görsel içerik
    has_diagram BOOLEAN DEFAULT FALSE,
    has_table BOOLEAN DEFAULT FALSE,
    has_image BOOLEAN DEFAULT FALSE,
    diagram_description TEXT COMMENT 'Şema/resim açıklaması',
    
    -- Q&A (bu sayfaya özel sorular)
    questions JSON COMMENT '[{"q":"...","a":"..."}]',
    question_count INT DEFAULT 0,
    
    -- API kullanımı
    model_used VARCHAR(50) DEFAULT 'gemini-2.5-flash',
    input_tokens INT,
    output_tokens INT,
    cost_usd DECIMAL(10,6),
    duration_ms INT,
    
    -- Kullanım istatistikleri
    view_count INT DEFAULT 1,
    last_viewed_at TIMESTAMP NULL,
    
    -- Meta
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    created_by INT COMMENT 'İlk analiz eden kullanıcı',
    
    -- Index
    UNIQUE KEY idx_pdf_page (pdf_path(255), page_number),
    INDEX idx_page_type (page_type),
    INDEX idx_has_diagram (has_diagram),
    INDEX idx_view_count (view_count DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- -----------------------------------------------------
-- TABLO 3: pdf_user_history
-- Amaç: Kullanıcı aktivitesi takibi
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS pdf_user_history (
    id INT AUTO_INCREMENT PRIMARY KEY,
    
    user_id INT NOT NULL,
    pdf_path VARCHAR(500) NOT NULL,
    page_number INT,
    
    action ENUM('open_pdf','view_page','ask_question','click_qa') NOT NULL,
    action_data JSON COMMENT 'Ek bilgi (soru metni vs)',
    
    session_id VARCHAR(64),
    ip_address VARCHAR(45),
    user_agent VARCHAR(255),
    
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    INDEX idx_user (user_id),
    INDEX idx_pdf (pdf_path(255)),
    INDEX idx_action (action),
    INDEX idx_created (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- -----------------------------------------------------
-- VIEW: Popüler sayfalar (öncelikli analiz için)
-- -----------------------------------------------------
CREATE OR REPLACE VIEW v_popular_pages AS
SELECT 
    pd.pdf_path,
    pd.page_number,
    pd.page_type,
    pd.title,
    pd.view_count,
    pd.question_count,
    (pd.view_count * 2 + pd.question_count * 5) as popularity_score
FROM pdf_page_details pd
ORDER BY popularity_score DESC;

-- -----------------------------------------------------
-- VIEW: Analiz durumu özeti
-- -----------------------------------------------------
CREATE OR REPLACE VIEW v_pdf_analysis_status AS
SELECT 
    pi.pdf_path,
    pi.total_pages,
    pi.content_pages,
    COUNT(pd.id) as analyzed_pages,
    ROUND(COUNT(pd.id) / pi.content_pages * 100, 1) as analysis_percentage,
    SUM(pd.question_count) as total_questions,
    SUM(pd.view_count) as total_views
FROM pdf_page_index pi
LEFT JOIN pdf_page_details pd ON pi.pdf_path = pd.pdf_path
GROUP BY pi.pdf_path;

-- =====================================================
-- ÖRNEK VERİ YAPISI
-- =====================================================

/*
pdf_page_index örnek:
{
  "pdf_path": "İŞ MAKİNASI GRUBU/HITACHI/ZW 180-5A/ZW 180-5A SORUN GİDERME.pdf",
  "total_pages": 436,
  "content_pages": 404,
  "page_list": [
    {"p": 1, "t": "cover", "h": "Cover Page"},
    {"p": 3, "t": "intro", "h": "Introduction"},
    {"p": 50, "t": "diagram", "h": "Hydraulic System"},
    {"p": 100, "t": "procedure", "h": "Main Pump Flow Rate"},
    ...
  ],
  "page_types": {
    "cover": 1,
    "intro": 15,
    "diagram": 80,
    "procedure": 120,
    "table": 50,
    "fault": 100,
    "spec": 38
  }
}

pdf_page_details örnek (sayfa 100):
{
  "page_number": 100,
  "page_type": "procedure",
  "title": "Main Pump Flow Rate Measurement",
  "summary": "Ana pompa akış hızı ölçüm prosedürü...",
  "key_info": ["ST 6069 adaptör gerekli", "Yağ sıcaklığı: 50±5°C"],
  "questions": [
    {"q": "Ana pompa akış testi için hangi aletler gerekli?", "a": "ST 6069, ST 6943, ST 6941..."},
    {"q": "Hidrolik yağ sıcaklığı kaç derece olmalı?", "a": "50±5°C (122±9°F)"}
  ]
}
*/

