-- ============================================================
--  سامانه ساماندهی پرستاران کلینیک شادی — دیتابیس مستقل
--  Shadi Clinic Nursing Management System — schema + seed
-- ------------------------------------------------------------
--  این فایل روی یک دیتابیس «جداگانه» اجرا می‌شود (نه دیتابیس سایت مادر).
--  همه‌ی جدول‌ها InnoDB/utf8mb4 هستند. اجرای مجدد امن (IF NOT EXISTS + INSERT IGNORE).
-- ============================================================
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

/* کاربران سیستم (لاگین مستقل) */
CREATE TABLE IF NOT EXISTS `users` (
  `id`            INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `name`          VARCHAR(120) NOT NULL,
  `username`      VARCHAR(60)  NOT NULL,
  `password_hash` VARCHAR(255) NOT NULL,
  `role`          ENUM('admin','operator','manager','supervisor') NOT NULL DEFAULT 'operator',
  `is_active`     TINYINT(1)   NOT NULL DEFAULT 1,
  `last_login_at` DATETIME     DEFAULT NULL,
  `created_at`    DATETIME     DEFAULT NULL,
  `updated_at`    DATETIME     DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/* پرستارها */
CREATE TABLE IF NOT EXISTS `nurses` (
  `id`            INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `full_name`     VARCHAR(120) NOT NULL,
  `short_code`    VARCHAR(40)  DEFAULT NULL,
  `aliases`       VARCHAR(255) DEFAULT NULL,   -- نام‌های مستعار جداشده با کاما (برای autocomplete)
  `role_title`    VARCHAR(80)  DEFAULT NULL,
  `is_supervisor` TINYINT(1)   NOT NULL DEFAULT 0,
  `is_active`     TINYINT(1)   NOT NULL DEFAULT 1,
  `created_at`    DATETIME     DEFAULT NULL,
  `updated_at`    DATETIME     DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_active` (`is_active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/* پزشک‌ها */
CREATE TABLE IF NOT EXISTS `doctors` (
  `id`         INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `full_name`  VARCHAR(120) NOT NULL,
  `short_code` VARCHAR(40)  DEFAULT NULL,
  `specialty`  VARCHAR(120) DEFAULT NULL,
  `is_active`  TINYINT(1)   NOT NULL DEFAULT 1,
  `created_at` DATETIME     DEFAULT NULL,
  `updated_at` DATETIME     DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_active` (`is_active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/* پروسیجرها / دستگاه‌ها */
CREATE TABLE IF NOT EXISTS `procedures` (
  `id`                       INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `title`                    VARCHAR(120) NOT NULL,
  `category`                 VARCHAR(80)  DEFAULT NULL,
  `icon`                     VARCHAR(60)  DEFAULT NULL,
  `default_duration_minutes` INT          DEFAULT NULL,
  `is_device`                TINYINT(1)   NOT NULL DEFAULT 0,
  `is_active`                TINYINT(1)   NOT NULL DEFAULT 1,
  `created_at`               DATETIME     DEFAULT NULL,
  `updated_at`               DATETIME     DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_active` (`is_active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/* رکورد اصلی ثبت فرایند */
CREATE TABLE IF NOT EXISTS `nursing_records` (
  `id`                        INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `patient_name`              VARCHAR(160) NOT NULL,
  `patient_file_number`       VARCHAR(60)  DEFAULT NULL,
  `patient_mobile`            VARCHAR(30)  DEFAULT NULL,
  `doctor_id`                 INT UNSIGNED DEFAULT NULL,
  `procedure_id`              INT UNSIGNED DEFAULT NULL,
  `room_type`                 VARCHAR(40)  DEFAULT NULL,
  `record_date`               DATE         DEFAULT NULL,
  `status`                    VARCHAR(30)  NOT NULL DEFAULT 'waiting',
  `numbing_started_at`        DATETIME     DEFAULT NULL,
  `numbing_ended_at`          DATETIME     DEFAULT NULL,
  `procedure_started_at`      DATETIME     DEFAULT NULL,
  `procedure_ended_at`        DATETIME     DEFAULT NULL,
  `numbing_duration_minutes`  INT          DEFAULT NULL,
  `procedure_duration_minutes`INT          DEFAULT NULL,
  `total_duration_minutes`    INT          DEFAULT NULL,
  `notes`                     TEXT         DEFAULT NULL,
  `created_by`                INT UNSIGNED DEFAULT NULL,
  `updated_by`                INT UNSIGNED DEFAULT NULL,
  `created_at`                DATETIME     DEFAULT NULL,
  `updated_at`                DATETIME     DEFAULT NULL,
  `deleted_at`                DATETIME     DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_date` (`record_date`),
  KEY `idx_status` (`status`),
  KEY `idx_doctor` (`doctor_id`),
  KEY `idx_procedure` (`procedure_id`),
  KEY `idx_deleted` (`deleted_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/* رابطه‌ی رکورد ↔ پرستارها (اصلی + ادها) */
CREATE TABLE IF NOT EXISTS `record_nurses` (
  `id`           INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `record_id`    INT UNSIGNED NOT NULL,
  `nurse_id`     INT UNSIGNED NOT NULL,
  `role_type`    VARCHAR(40)  DEFAULT NULL, -- primary / assist_doctor / assist_nurse / prep / or_help
  `is_primary`   TINYINT(1)   NOT NULL DEFAULT 0,
  `is_assistant` TINYINT(1)   NOT NULL DEFAULT 0,
  `created_at`   DATETIME     DEFAULT NULL,
  `updated_at`   DATETIME     DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_record` (`record_id`),
  KEY `idx_nurse` (`nurse_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/* لاگ تغییرات */
CREATE TABLE IF NOT EXISTS `activity_logs` (
  `id`         INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `user_id`    INT UNSIGNED DEFAULT NULL,
  `record_id`  INT UNSIGNED DEFAULT NULL,
  `action`     VARCHAR(80)  DEFAULT NULL,
  `old_value`  TEXT         DEFAULT NULL,
  `new_value`  TEXT         DEFAULT NULL,
  `ip_address` VARCHAR(64)  DEFAULT NULL,
  `user_agent` VARCHAR(255) DEFAULT NULL,
  `created_at` DATETIME     DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_record` (`record_id`),
  KEY `idx_user` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
--  داده‌ی اولیه (Seed)
-- ============================================================

/* پرستارها (با کد کوتاه و aliasها برای autocomplete) */
DROP TEMPORARY TABLE IF EXISTS `_seed_nurses`;
CREATE TEMPORARY TABLE `_seed_nurses` LIKE `nurses`;
INSERT INTO `_seed_nurses` (`full_name`,`short_code`,`aliases`,`role_title`,`is_supervisor`,`is_active`,`created_at`) VALUES
 ('سپیده زاهدی','س','سپیده,زاهدی',NULL,0,1,NOW()),
 ('فرزانه رمضانی','ف','فرزانه,رمضانی',NULL,0,1,NOW()),
 ('نگار ولی پور','ن','نگار,ولی پور,ولیپور',NULL,0,1,NOW()),
 ('مهشید لطیف نیا','م','مهشید,لطیف نیا,لطیفنیا',NULL,0,1,NOW()),
 ('خانم نوید','نوید','نوید,خن,سرپرستار','سرپرستار',1,1,NOW());
INSERT INTO `nurses` (`full_name`,`short_code`,`aliases`,`role_title`,`is_supervisor`,`is_active`,`created_at`)
SELECT s.`full_name`,s.`short_code`,s.`aliases`,s.`role_title`,s.`is_supervisor`,s.`is_active`,s.`created_at`
FROM `_seed_nurses` s
WHERE NOT EXISTS (SELECT 1 FROM `nurses` n WHERE n.`full_name`=s.`full_name`);
DROP TEMPORARY TABLE `_seed_nurses`;

/* پزشک‌ها */
DROP TEMPORARY TABLE IF EXISTS `_seed_doctors`;
CREATE TEMPORARY TABLE `_seed_doctors` LIKE `doctors`;
INSERT INTO `_seed_doctors` (`full_name`,`specialty`,`is_active`,`created_at`) VALUES
 ('شادی مظلومی','متخصص پوست',1,NOW()),
 ('مهسا رشیدی',NULL,1,NOW()),
 ('فریبا محمدی',NULL,1,NOW()),
 ('زهره رخشان',NULL,1,NOW()),
 ('پدرام ملحم آذر',NULL,1,NOW()),
 ('معصومه دلجو',NULL,1,NOW()),
 ('اسدلله کیانی',NULL,1,NOW()),
 ('مریم حاج بابائی',NULL,1,NOW()),
 ('امیر رضا سلامت شریف',NULL,1,NOW());
INSERT INTO `doctors` (`full_name`,`specialty`,`is_active`,`created_at`)
SELECT s.`full_name`,s.`specialty`,s.`is_active`,s.`created_at`
FROM `_seed_doctors` s
WHERE NOT EXISTS (SELECT 1 FROM `doctors` d WHERE d.`full_name`=s.`full_name`);
DROP TEMPORARY TABLE `_seed_doctors`;

/* پروسیجرها / دستگاه‌ها (با آیکون Tabler) */
DROP TEMPORARY TABLE IF EXISTS `_seed_procedures`;
CREATE TEMPORARY TABLE `_seed_procedures` LIKE `procedures`;
INSERT INTO `_seed_procedures` (`title`,`category`,`icon`,`is_device`,`is_active`,`created_at`) VALUES
 ('PRP','تزریقات','ti-droplet',0,1,NOW()),
 ('RF اسکارلت','دستگاه','ti-bolt',1,1,NOW()),
 ('RF ویرچو','دستگاه','ti-bolt',1,1,NOW()),
 ('PDL','لیزر','ti-flare',1,1,NOW()),
 ('تیکسل','دستگاه','ti-grid-dots',1,1,NOW()),
 ('IPL','لیزر','ti-sun',1,1,NOW()),
 ('آنجلا','دستگاه','ti-device-heart-monitor',1,1,NOW()),
 ('رنویون','دستگاه','ti-plug-connected',1,1,NOW()),
 ('CO2 اولترا','لیزر','ti-rays',1,1,NOW()),
 ('CO2 فرکشنال','لیزر','ti-grid-pattern',1,1,NOW()),
 ('کیوسوئیچ','لیزر','ti-sparkles',1,1,NOW()),
 ('کربوکسی','پروسیجر','ti-bubble',0,1,NOW()),
 ('پیکولو','لیزر','ti-stars',1,1,NOW()),
 ('میکرودرم','پروسیجر','ti-circle-dot',0,1,NOW()),
 ('میکرونیدلینگ','پروسیجر','ti-needle',0,1,NOW()),
 ('مزونیدلینگ','پروسیجر','ti-needle',0,1,NOW());
INSERT INTO `procedures` (`title`,`category`,`icon`,`is_device`,`is_active`,`created_at`)
SELECT s.`title`,s.`category`,s.`icon`,s.`is_device`,s.`is_active`,s.`created_at`
FROM `_seed_procedures` s
WHERE NOT EXISTS (SELECT 1 FROM `procedures` p WHERE p.`title`=s.`title`);
DROP TEMPORARY TABLE `_seed_procedures`;

SET FOREIGN_KEY_CHECKS = 1;

-- ============================================================
--  Rollback (در صورت نیاز):
--   DROP TABLE IF EXISTS `activity_logs`,`record_nurses`,`nursing_records`,
--                        `procedures`,`doctors`,`nurses`,`users`;
-- ============================================================
