-- =======================================================
-- Database Schema for Arian Attendance System
-- Domain: app.ariantrans.com
-- Database Engine: MySQL / MariaDB (phpMyAdmin Compatible)
-- Charset: utf8mb4 / Persian (Farsi) Compatible
-- =======================================================

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- 1. Table: roles (نقش‌ها و دسترسی‌های سازمانی)
CREATE TABLE IF NOT EXISTS `roles` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `role_key` VARCHAR(50) NOT NULL UNIQUE,
  `role_name` VARCHAR(100) NOT NULL,
  `description` VARCHAR(255) NULL,
  `can_manage_users` TINYINT(1) DEFAULT 0,
  `can_view_all_reports` TINYINT(1) DEFAULT 0,
  `can_approve_leaves` TINYINT(1) DEFAULT 0,
  `can_view_live_location` TINYINT(1) DEFAULT 0,
  `can_edit_settings` TINYINT(1) DEFAULT 0,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_persian_ci;

-- 2. Table: users (کاربران، مدیران و پرسنل)
CREATE TABLE IF NOT EXISTS `users` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `username` VARCHAR(50) NOT NULL UNIQUE,
  `password` VARCHAR(255) NOT NULL,
  `full_name` VARCHAR(100) NOT NULL,
  `phone` VARCHAR(20) NULL,
  `role_key` VARCHAR(50) NOT NULL DEFAULT 'employee',
  `department` VARCHAR(100) DEFAULT 'عمومی',
  `personnel_code` VARCHAR(30) NULL,
  `is_active` TINYINT(1) DEFAULT 1,
  `allowed_geofence_meters` INT DEFAULT 200,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  FOREIGN KEY (`role_key`) REFERENCES `roles`(`role_key`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_persian_ci;

-- 3. Table: company_settings (تنظیمات شرکت، شیفت کاری و موقعیت مجاز)
CREATE TABLE IF NOT EXISTS `company_settings` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `company_name` VARCHAR(100) NOT NULL DEFAULT 'شرکت بین‌المللی آرین ترانس',
  `work_start_time` VARCHAR(10) NOT NULL DEFAULT '08:00',
  `work_end_time` VARCHAR(10) NOT NULL DEFAULT '17:00',
  `delay_grace_minutes` INT DEFAULT 15,
  `office_lat` DECIMAL(10, 8) NOT NULL DEFAULT 35.72190000,
  `office_lng` DECIMAL(11, 8) NOT NULL DEFAULT 51.33470000,
  `geofence_radius_meters` INT NOT NULL DEFAULT 300,
  `require_gps_validation` TINYINT(1) DEFAULT 1,
  `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_persian_ci;

-- 4. Table: attendance_logs (لاگ‌های ثبت تردد ورود و خروج)
CREATE TABLE IF NOT EXISTS `attendance_logs` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `user_id` INT NOT NULL,
  `log_type` ENUM('check_in', 'check_out') NOT NULL,
  `log_time` DATETIME NOT NULL,
  `shamsi_date` VARCHAR(20) NOT NULL,
  `latitude` DECIMAL(10, 8) NULL,
  `longitude` DECIMAL(11, 8) NULL,
  `location_name` VARCHAR(255) NULL,
  `distance_meters` INT NULL,
  `is_within_geofence` TINYINT(1) DEFAULT 1,
  `notes` TEXT NULL,
  `ip_address` VARCHAR(50) NULL,
  `device_model` VARCHAR(100) NULL,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_persian_ci;

-- 5. Table: leave_requests (درخواست‌های مرخصی و مأموریت)
CREATE TABLE IF NOT EXISTS `leave_requests` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `user_id` INT NOT NULL,
  `request_type` ENUM('daily_leave', 'hourly_leave', 'mission') NOT NULL,
  `start_date` VARCHAR(20) NOT NULL,
  `end_date` VARCHAR(20) NOT NULL,
  `start_time` VARCHAR(10) NULL,
  `end_time` VARCHAR(10) NULL,
  `reason` TEXT NOT NULL,
  `destination` VARCHAR(255) NULL,
  `status` ENUM('pending', 'approved', 'rejected') NOT NULL DEFAULT 'pending',
  `manager_response_note` TEXT NULL,
  `reviewed_by` INT NULL,
  `reviewed_at` DATETIME NULL,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE,
  FOREIGN KEY (`reviewed_by`) REFERENCES `users`(`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_persian_ci;

-- 6. Table: live_locations (موقعیت مکانی زنده و وضعیت آنلاین پرسنل)
CREATE TABLE IF NOT EXISTS `live_locations` (
  `user_id` INT PRIMARY KEY,
  `latitude` DECIMAL(10, 8) NOT NULL,
  `longitude` DECIMAL(11, 8) NOT NULL,
  `accuracy` FLOAT NULL,
  `battery_level` INT NULL,
  `current_status` VARCHAR(50) DEFAULT 'آنلاین',
  `updated_at` DATETIME NOT NULL,
  FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_persian_ci;

-- 7. Table: notifications (اعلان‌های لایو سیستم برای مدیران)
CREATE TABLE IF NOT EXISTS `notifications` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `user_id` INT NOT NULL,
  `title` VARCHAR(150) NOT NULL,
  `message` TEXT NOT NULL,
  `type` VARCHAR(50) NOT NULL DEFAULT 'attendance',
  `is_read` TINYINT(1) DEFAULT 0,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_persian_ci;

-- =======================================================
-- Initial Seed Data (اطلاعات اولیه)
-- =======================================================

-- Roles
INSERT IGNORE INTO `roles` (`role_key`, `role_name`, `description`, `can_manage_users`, `can_view_all_reports`, `can_approve_leaves`, `can_view_live_location`, `can_edit_settings`) VALUES
('manager', 'مدیر ارشد سیستم', 'دسترسی کامل به تمام گزارشات، تاییدات و مدیریت پرسنل', 1, 1, 1, 1, 1),
('supervisor', 'سرپرست بخش', 'مشاهده ترددها، مانیتورینگ زنده و تایید مرخصی‌ها', 0, 1, 1, 1, 0),
('employee', 'کارمند', 'ثبت تردد ورود و خروج، درخواست مرخصی و مأموریت', 0, 0, 0, 0, 0);

-- Default Settings
INSERT IGNORE INTO `company_settings` (`id`, `company_name`, `work_start_time`, `work_end_time`, `delay_grace_minutes`, `office_lat`, `office_lng`, `geofence_radius_meters`, `require_gps_validation`) VALUES
(1, 'شرکت بین‌المللی آرین ترانس', '08:00', '17:00', 15, 35.72190000, 51.33470000, 300, 1);

-- Default Master Administrator (Change password after first login)
INSERT IGNORE INTO `users` (`id`, `username`, `password`, `full_name`, `phone`, `role_key`, `department`, `personnel_code`) VALUES
(1, 'admin', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'مدیر ارشد آرین ترانس', '', 'manager', 'مدیریت مرکزی', 'ADM-101');

SET FOREIGN_KEY_CHECKS = 1;
