-- Kranni Dashboard Verilənlər Bazası
CREATE DATABASE IF NOT EXISTS kranni_dashboard CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE kranni_dashboard;

-- Siparişlər cədvəli
CREATE TABLE IF NOT EXISTS siparisler (
    id INT PRIMARY KEY AUTO_INCREMENT,
    siparis_kodu VARCHAR(20) UNIQUE NOT NULL,
    musteri_id INT NOT NULL,
    usta_id INT NULL,
    kategori VARCHAR(50) NOT NULL,
    is_tanimi TEXT NOT NULL,
    qiymet DECIMAL(10,2) NOT NULL,
    status ENUM('Usta axtarılır', 'Qəbul edildi', 'İcrada', 'Tamamlandı', 'Ləğv edildi') DEFAULT 'Usta axtarılır',
    priority ENUM('Normal', 'Təcili') DEFAULT 'Normal',
    odeme_tipi ENUM('Nəğd', 'Kart', 'Online') NOT NULL,
    tarix DATE NOT NULL,
    saat TIME NOT NULL,
    unvan TEXT,
    bölgə VARCHAR(50),
    platform_komissionu DECIMAL(5,2) DEFAULT 15.00,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (musteri_id) REFERENCES musteriler(id) ON DELETE CASCADE,
    FOREIGN KEY (usta_id) REFERENCES ustalar(id) ON DELETE SET NULL
);

-- Ödəmələr cədvəli
CREATE TABLE IF NOT EXISTS odemeler (
    id INT PRIMARY KEY AUTO_INCREMENT,
    siparis_id INT NOT NULL,
    usta_id INT NOT NULL,
    mebleg DECIMAL(10,2) NOT NULL,
    odeme_tipi ENUM('Bank transferi', 'Nəğd', 'Kart') NOT NULL,
    status ENUM('Gözləyir', 'Tamamlandı', 'Uğursuz') DEFAULT 'Gözləyir',
    odeme_tarixi TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (siparis_id) REFERENCES siparisler(id) ON DELETE CASCADE,
    FOREIGN KEY (usta_id) REFERENCES ustalar(id) ON DELETE CASCADE
);

-- Rəylər cədvəli
CREATE TABLE IF NOT EXISTS reyler (
    id INT PRIMARY KEY AUTO_INCREMENT,
    siparis_id INT NOT NULL,
    musteri_id INT NOT NULL,
    usta_id INT NOT NULL,
    puan INT CHECK (puan BETWEEN 1 AND 5),
    yorum TEXT,
    status ENUM('Aktiv', 'Gizli', 'Silinmiş') DEFAULT 'Aktiv',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (siparis_id) REFERENCES siparisler(id) ON DELETE CASCADE,
    FOREIGN KEY (musteri_id) REFERENCES musteriler(id) ON DELETE CASCADE,
    FOREIGN KEY (usta_id) REFERENCES ustalar(id) ON DELETE CASCADE
);

-- Promo kodlar cədvəli
CREATE TABLE IF NOT EXISTS promo_kodlar (
    id INT PRIMARY KEY AUTO_INCREMENT,
    kod VARCHAR(20) UNIQUE NOT NULL,
    ad VARCHAR(100) NOT NULL,
    endirim_tipi ENUM('faiz', 'sabit') NOT NULL,
    endirim_mebleg DECIMAL(10,2) NOT NULL,
    min_mebleg DECIMAL(10,2) DEFAULT 0,
    max_endirim DECIMAL(10,2) DEFAULT NULL,
    istifade_limiti INT DEFAULT 100,
    istifade_edilib INT DEFAULT 0,
    baslama_tarixi DATE NOT NULL,
    bitis_tarixi DATE NOT NULL,
    status ENUM('Aktiv', 'Deaktiv') DEFAULT 'Aktiv',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Referal sistemi
CREATE TABLE IF NOT EXISTS referallar (
    id INT PRIMARY KEY AUTO_INCREMENT,
    referrer_id INT NOT NULL,
    referrer_type ENUM('Müştəri', 'Usta') NOT NULL,
    referred_id INT NOT NULL,
    referred_type ENUM('Müştəri', 'Usta') NOT NULL,
    referal_kod VARCHAR(20) NOT NULL,
    bonus_mebleg DECIMAL(10,2) NOT NULL,
    status ENUM('Gözləyir', 'Tamamlandı', 'Rədd edildi') DEFAULT 'Gözləyir',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Mübahisələr cədvəli
CREATE TABLE IF NOT EXISTS mubahiseler (
    id INT PRIMARY KEY AUTO_INCREMENT,
    siparis_id INT NOT NULL,
    musteri_id INT NOT NULL,
    usta_id INT NOT NULL,
    problem TEXT NOT NULL,
    priority ENUM('Orta', 'Yüksək', 'Çox Yüksək') DEFAULT 'Orta',
    status ENUM('Açıq', 'İcrada', 'Həll olundu') DEFAULT 'Açıq',
    admin_qeyd TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    resolved_at TIMESTAMP NULL,
    FOREIGN KEY (siparis_id) REFERENCES siparisler(id) ON DELETE CASCADE,
    FOREIGN KEY (musteri_id) REFERENCES musteriler(id) ON DELETE CASCADE,
    FOREIGN KEY (usta_id) REFERENCES ustalar(id) ON DELETE CASCADE
);

-- Sistem ayarları
CREATE TABLE IF NOT EXISTS sistem_ayarlar (
    id INT PRIMARY KEY AUTO_INCREMENT,
    ayar_adi VARCHAR(50) UNIQUE NOT NULL,
    ayar_deyeri TEXT NOT NULL,
    tanim TEXT,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- Sistem jurnalları
CREATE TABLE IF NOT EXISTS sistem_jurnali (
    id INT PRIMARY KEY AUTO_INCREMENT,
    tip ENUM('USER', 'SYSTEM', 'ERROR', 'PAYMENT', 'ORDER') NOT NULL,
    mesaj TEXT NOT NULL,
    istifadeci_id INT NULL,
    ip_unvan VARCHAR(45),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Default sistem ayarları
INSERT INTO sistem_ayarlar (ayar_adi, ayar_deyeri, tanim) VALUES
('commission_rate', '15.0', 'Platform komisiya faizi'),
('emergency_fee', '25.0', 'Təcili çağırış haqqı'),
('night_service_fee', '20.0', 'Gecə xidməti haqqı'),
('minimum_order_amount', '30.0', 'Minimum sifariş məbləği'),
('currency', 'AZN', 'Platform valyutası');