-- Ask Manisha API - MySQL Database Schema
-- Database structure matching original MongoDB schema

CREATE DATABASE IF NOT EXISTS appmanisha_ask_manisha CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE appmanisha_ask_manisha;

-- Users table
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    countryCode VARCHAR(10) DEFAULT '+91',
    phone VARCHAR(20),
    name VARCHAR(255),
    email VARCHAR(255),
    password VARCHAR(255),
    dob DATE,
    gender ENUM('male', 'female', 'other'),
    birthTime VARCHAR(5),
    birthCity VARCHAR(255),
    birthState VARCHAR(255),
    birthCountry VARCHAR(255),
    birthLatitude DECIMAL(10, 8),
    birthLongitude DECIMAL(11, 8),
    zodiacSign VARCHAR(50),
    role ENUM('user', 'admin') DEFAULT 'user',
    isActive BOOLEAN DEFAULT TRUE,
    isVerified BOOLEAN DEFAULT FALSE,
    profileCompleted BOOLEAN DEFAULT FALSE,
    provider VARCHAR(50),
    providerId VARCHAR(255),
    deviceType VARCHAR(50),
    fcmTokens JSON,
    notificationPreferences JSON,
    notificationEnabled BOOLEAN DEFAULT TRUE,
    dailyHoroscopeEnabled BOOLEAN DEFAULT TRUE,
    weeklyHoroscopeEnabled BOOLEAN DEFAULT TRUE,
    monthlyHoroscopeEnabled BOOLEAN DEFAULT TRUE,
    lastLogin TIMESTAMP NULL,
    createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY unique_phone (phone),
    UNIQUE KEY unique_email (email),
    INDEX idx_provider (provider, providerId),
    INDEX idx_role (role),
    INDEX idx_active (isActive)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- OTP table
CREATE TABLE IF NOT EXISTS otps (
    id INT AUTO_INCREMENT PRIMARY KEY,
    countryCode VARCHAR(10) NOT NULL,
    phone VARCHAR(20) NOT NULL,
    otp VARCHAR(6) NOT NULL,
    purpose ENUM('login', 'signup', 'verification') DEFAULT 'login',
    attempts INT DEFAULT 0,
    isUsed BOOLEAN DEFAULT FALSE,
    expiresAt TIMESTAMP NOT NULL,
    createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_phone (countryCode, phone),
    INDEX idx_expires (expiresAt)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Notifications table
CREATE TABLE IF NOT EXISTS notifications (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(200) NOT NULL,
    body TEXT NOT NULL,
    userId INT NOT NULL,
    recipientId INT,
    isRead BOOLEAN DEFAULT FALSE,
    readAt TIMESTAMP NULL,
    type ENUM('general', 'horoscope', 'announcement', 'promotion', 'alert', 'quote') DEFAULT 'general',
    metadata JSON,
    sentBy INT,
    createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (userId) REFERENCES users(id) ON DELETE CASCADE,
    FOREIGN KEY (recipientId) REFERENCES users(id) ON DELETE CASCADE,
    FOREIGN KEY (sentBy) REFERENCES users(id) ON DELETE CASCADE,
    INDEX idx_user (userId, isRead, createdAt),
    INDEX idx_recipient (recipientId, isRead, createdAt),
    INDEX idx_sent_by (sentBy, createdAt),
    INDEX idx_type (type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Feedback table
CREATE TABLE IF NOT EXISTS feedback (
    id INT AUTO_INCREMENT PRIMARY KEY,
    userId INT NOT NULL,
    rating INT NOT NULL CHECK (rating >= 1 AND rating <= 5),
    message TEXT NOT NULL,
    createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (userId) REFERENCES users(id) ON DELETE CASCADE,
    UNIQUE KEY unique_user_feedback (userId),
    INDEX idx_rating (rating),
    INDEX idx_created (createdAt DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Quotes table
CREATE TABLE IF NOT EXISTS quotes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    description TEXT NOT NULL,
    createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_created (createdAt DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Samvatinfo table
CREATE TABLE IF NOT EXISTS samvatinfo (
    id INT AUTO_INCREMENT PRIMARY KEY,
    sakaSalivahanaNumber INT NOT NULL,
    sakaSalivahanaNameNumber INT NOT NULL,
    sakaSalivahanaYearName VARCHAR(255) NOT NULL,
    vikramChaitradiNumber INT NOT NULL,
    vikramChaitradiNameNumber INT NOT NULL,
    vikramChaitradiYearName VARCHAR(255) NOT NULL,
    timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_created (createdAt DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Horoscopes table
CREATE TABLE IF NOT EXISTS horoscopes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    sunsign ENUM('Aries', 'Taurus', 'Gemini', 'Cancer', 'Leo', 'Virgo', 'Libra', 'Scorpio', 'Sagittarius', 'Capricorn', 'Aquarius', 'Pisces') NOT NULL,
    period ENUM('daily', 'weekly', 'monthly', 'yearly') NOT NULL,
    title VARCHAR(255),
    content TEXT NOT NULL,
    luckyNumber VARCHAR(100),
    luckyColor VARCHAR(100),
    mood VARCHAR(100),
    keywords TEXT,
    intensity VARCHAR(50),
    date DATE,
    isActive BOOLEAN DEFAULT TRUE,
    deletedAt TIMESTAMP NULL,
    createdBy INT,
    updatedBy INT,
    createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (createdBy) REFERENCES users(id) ON DELETE SET NULL,
    FOREIGN KEY (updatedBy) REFERENCES users(id) ON DELETE SET NULL,
    INDEX idx_sunsign_period (sunsign, period, isActive, createdAt),
    INDEX idx_active (isActive, deletedAt),
    INDEX idx_date (date DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Insert default admin user (password: admin123)
INSERT INTO users (name, email, password, role, isVerified, profileCompleted, phone) 
VALUES (
    'Admin', 
    'admin@askmanisha.com', 
    '$2y$10$vuiSxuLG3EntLe9rtTJHfek4szWhXu05arAGF7ZtLE7Nc2hhpMHW.',
    'admin',
    TRUE,
    TRUE,
    '9999999999'
) ON DUPLICATE KEY UPDATE email=email;
