-- سامانه حضور و غیاب - ساخت دیتابیس
-- این فایل را در phpMyAdmin هاست خود Import کنید

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

CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) UNIQUE NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    full_name VARCHAR(100) NOT NULL,
    role ENUM('employee','admin') NOT NULL DEFAULT 'employee',
    daily_work_hours DECIMAL(4,2) NOT NULL DEFAULT 8.00,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS attendance (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    jalali_date VARCHAR(10) NOT NULL,
    check_in TIME NULL,
    check_out TIME NULL,
    total_hours DECIMAL(5,2) DEFAULT 0,
    status ENUM('present','late','absent','leave') DEFAULT 'present',
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
    UNIQUE KEY uniq_user_date (user_id, jalali_date)
) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS leave_requests (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    leave_type ENUM('sick','personal','vacation','other') NOT NULL,
    reason TEXT NOT NULL,
    start_date VARCHAR(10) NOT NULL,
    end_date VARCHAR(10) NOT NULL,
    status ENUM('pending','approved','rejected') DEFAULT 'pending',
    rejection_reason TEXT NULL,
    requested_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    reviewed_by INT NULL,
    seen_by_employee TINYINT(1) DEFAULT 1,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS holidays (
    id INT AUTO_INCREMENT PRIMARY KEY,
    jalali_date VARCHAR(10) UNIQUE NOT NULL,
    title VARCHAR(150) NOT NULL
) ENGINE=InnoDB;

-- کد QR مشترک، هر ۲۰ ثانیه یک کد جدید صادر می‌شود
CREATE TABLE IF NOT EXISTS rotating_qr_codes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    code VARCHAR(32) NOT NULL,
    expires_at DATETIME NOT NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;

-- حساب مخصوص نمایش کیوسک QR (جدا از ادمین اصلی)
CREATE TABLE IF NOT EXISTS kiosk_account (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) UNIQUE NOT NULL,
    password_hash VARCHAR(255) NOT NULL
) ENGINE=InnoDB;

-- محدودیت تلاش ورود کیوسک (ضدحدس‌زنی رمز)
CREATE TABLE IF NOT EXISTS kiosk_attempts (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ip_address VARCHAR(45) NOT NULL,
    attempted_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
