-- ============================================================================
--  2026_mother.sql — اسکیمای کاملِ «سیستم مادر کلینیک شادی» روی shadicli_nurse
-- ----------------------------------------------------------------------------
--  ADDITIVE + idempotent. اجرا روی دیتابیس shadicli_nurse (phpMyAdmin → SQL → Go).
--  اجرای مجدد امن است. هیچ جدول پرستاریِ موجود حذف نمی‌شود.
-- ============================================================================
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ───────────────────────── ۱) پرونده‌ی مادر بیمار ──────────────────────────
CREATE TABLE IF NOT EXISTS `cw_patients` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `file_number` VARCHAR(60) DEFAULT NULL, `full_name` VARCHAR(120) NOT NULL,
  `mobile` VARCHAR(20) DEFAULT NULL, `national_id` VARCHAR(20) DEFAULT NULL,
  `birth_date` DATE DEFAULT NULL, `gender` ENUM('female','male','other') DEFAULT NULL,
  `father_name` VARCHAR(80) DEFAULT NULL, `marital_status` VARCHAR(20) DEFAULT NULL,
  `job` VARCHAR(80) DEFAULT NULL, `education` VARCHAR(80) DEFAULT NULL,
  `address` VARCHAR(255) DEFAULT NULL, `emergency_contact` VARCHAR(80) DEFAULT NULL,
  `emergency_mobile` VARCHAR(20) DEFAULT NULL, `referral_source` VARCHAR(60) DEFAULT NULL,
  `vip_level` TINYINT NOT NULL DEFAULT 0,
  `verify_status` ENUM('verified','pending') NOT NULL DEFAULT 'verified',
  `notes` TEXT DEFAULT NULL, `created_by` INT UNSIGNED DEFAULT NULL,
  `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, `updated_at` DATETIME DEFAULT NULL,
  PRIMARY KEY (`id`), KEY `idx_mobile` (`mobile`), KEY `idx_national` (`national_id`),
  KEY `idx_file` (`file_number`), KEY `idx_name` (`full_name`), KEY `idx_verify` (`verify_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `cw_patient_profile` (
  `patient_id` INT UNSIGNED NOT NULL, `skin_type` VARCHAR(30) DEFAULT NULL,
  `pregnancy` TINYINT(1) DEFAULT NULL, `contraception` TINYINT(1) DEFAULT NULL,
  `seizure` TINYINT(1) DEFAULT NULL, `dental_history` TINYINT(1) DEFAULT NULL,
  `neuropsych` TINYINT(1) DEFAULT NULL, `special_disease` VARCHAR(255) DEFAULT NULL,
  `keloid` TINYINT(1) DEFAULT NULL, `smoking` TINYINT(1) DEFAULT NULL, `alcohol` TINYINT(1) DEFAULT NULL,
  `surgery_history` VARCHAR(255) DEFAULT NULL, `cosmetic_surgery` VARCHAR(255) DEFAULT NULL,
  `botox_history` TINYINT(1) DEFAULT NULL, `filler_history` TINYINT(1) DEFAULT NULL,
  `fat_injection` TINYINT(1) DEFAULT NULL, `laser_history` TINYINT(1) DEFAULT NULL,
  `medication_history` VARCHAR(255) DEFAULT NULL, `allergy_history` VARCHAR(255) DEFAULT NULL,
  `notes` TEXT DEFAULT NULL, `updated_at` DATETIME DEFAULT NULL,
  PRIMARY KEY (`patient_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ───────────────────────── ۲) ویزیت زنده (ستون فقرات) ──────────────────────
CREATE TABLE IF NOT EXISTS `cw_visits` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `patient_id` INT UNSIGNED NOT NULL,
  `visit_date` DATE DEFAULT NULL, `visit_date_key` CHAR(8) DEFAULT NULL,
  `entry_reason` VARCHAR(60) DEFAULT NULL, `current_status` VARCHAR(40) NOT NULL DEFAULT 'arrived',
  `assigned_doctor_id` INT UNSIGNED DEFAULT NULL, `entry_source` VARCHAR(40) DEFAULT 'reception',
  `is_laser_fast` TINYINT(1) NOT NULL DEFAULT 0, `created_by` INT UNSIGNED DEFAULT NULL,
  `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, `updated_at` DATETIME DEFAULT NULL,
  `t_arrived` DATETIME DEFAULT NULL, `t_sent_doctor` DATETIME DEFAULT NULL, `t_in_doctor` DATETIME DEFAULT NULL,
  `t_sent_cashier` DATETIME DEFAULT NULL, `t_paid` DATETIME DEFAULT NULL, `t_sent_service` DATETIME DEFAULT NULL,
  `t_done` DATETIME DEFAULT NULL,
  PRIMARY KEY (`id`), KEY `idx_patient` (`patient_id`), KEY `idx_status` (`current_status`), KEY `idx_datekey` (`visit_date_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `cw_visit_log` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `visit_id` INT UNSIGNED NOT NULL,
  `from_status` VARCHAR(40) DEFAULT NULL, `to_status` VARCHAR(40) NOT NULL,
  `changed_by` INT UNSIGNED DEFAULT NULL, `note` VARCHAR(255) DEFAULT NULL,
  `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`), KEY `idx_visit` (`visit_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ───────────────────────── ۳) کاتالوگ خدمات / تشخیص / دارو ──────────────────
CREATE TABLE IF NOT EXISTS `cw_services` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `title` VARCHAR(150) NOT NULL, `category` VARCHAR(60) DEFAULT NULL,
  `base_price` BIGINT NOT NULL DEFAULT 0, `needs_doctor` TINYINT(1) NOT NULL DEFAULT 0,
  `needs_numbing` TINYINT(1) NOT NULL DEFAULT 0, `needs_photo` TINYINT(1) NOT NULL DEFAULT 0,
  `route_to` ENUM('laser','counter3','nurse','none') NOT NULL DEFAULT 'none',
  `commission_pct` DECIMAL(5,2) NOT NULL DEFAULT 0, `aliases` VARCHAR(255) DEFAULT NULL,
  `is_active` TINYINT(1) NOT NULL DEFAULT 1, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`), KEY `idx_active` (`is_active`), KEY `idx_route` (`route_to`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `cw_diagnoses` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `title` VARCHAR(150) NOT NULL, `category` VARCHAR(60) DEFAULT NULL,
  `aliases` VARCHAR(255) DEFAULT NULL, `is_approved` TINYINT(1) NOT NULL DEFAULT 1, `is_active` TINYINT(1) NOT NULL DEFAULT 1,
  `created_by` INT UNSIGNED DEFAULT NULL, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`), KEY `idx_title` (`title`), KEY `idx_cat` (`category`), KEY `idx_appr` (`is_approved`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `cw_medications` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `title` VARCHAR(180) NOT NULL, `generic_name` VARCHAR(150) DEFAULT NULL,
  `category` VARCHAR(60) DEFAULT NULL, `form` VARCHAR(40) DEFAULT NULL, `common_dosage` VARCHAR(120) DEFAULT NULL,
  `instruction_template` VARCHAR(255) DEFAULT NULL, `aliases` VARCHAR(255) DEFAULT NULL,
  `is_approved` TINYINT(1) NOT NULL DEFAULT 1, `is_active` TINYINT(1) NOT NULL DEFAULT 1,
  `created_by` INT UNSIGNED DEFAULT NULL, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`), KEY `idx_title` (`title`), KEY `idx_cat` (`category`), KEY `idx_appr` (`is_approved`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ───────────────────────── ۴) یادداشت/نسخه‌ی پزشک ───────────────────────────
CREATE TABLE IF NOT EXISTS `cw_doctor_notes` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `visit_id` INT UNSIGNED NOT NULL, `patient_id` INT UNSIGNED NOT NULL,
  `doctor_id` INT UNSIGNED DEFAULT NULL, `chief_complaint` TEXT DEFAULT NULL, `exam` TEXT DEFAULT NULL,
  `diagnosis_text` TEXT DEFAULT NULL, `dd_text` TEXT DEFAULT NULL, `prescription_text` TEXT DEFAULT NULL,
  `rx_json` MEDIUMTEXT DEFAULT NULL, `plan_text` TEXT DEFAULT NULL, `plan_json` MEDIUMTEXT DEFAULT NULL,
  `face_map` MEDIUMTEXT DEFAULT NULL, `note_cashier` TEXT DEFAULT NULL, `note_nurse` TEXT DEFAULT NULL,
  `note_laser` TEXT DEFAULT NULL, `need_photo` TINYINT(1) NOT NULL DEFAULT 0,
  `created_by` INT UNSIGNED DEFAULT NULL, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, `updated_at` DATETIME DEFAULT NULL,
  PRIMARY KEY (`id`), KEY `idx_visit` (`visit_id`), KEY `idx_patient` (`patient_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ارتقاء از نسخه‌ی قبلی: افزودن ستون‌های جدید اگر نبودند
SET @c:=(SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='cw_doctor_notes' AND COLUMN_NAME='rx_json');
SET @s:=IF(@c=0,'ALTER TABLE `cw_doctor_notes` ADD COLUMN `rx_json` MEDIUMTEXT NULL AFTER `prescription_text`','SELECT 1'); PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;
SET @c:=(SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='cw_doctor_notes' AND COLUMN_NAME='plan_json');
SET @s:=IF(@c=0,'ALTER TABLE `cw_doctor_notes` ADD COLUMN `plan_json` MEDIUMTEXT NULL AFTER `plan_text`','SELECT 1'); PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;
SET @c:=(SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='cw_doctor_notes' AND COLUMN_NAME='face_map');
SET @s:=IF(@c=0,'ALTER TABLE `cw_doctor_notes` ADD COLUMN `face_map` MEDIUMTEXT NULL AFTER `plan_json`','SELECT 1'); PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;

-- ───────────────────────── ۵) مالی سبک (پیش‌فاکتور) ─────────────────────────
CREATE TABLE IF NOT EXISTS `cw_payments` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `visit_id` INT UNSIGNED DEFAULT NULL, `patient_id` INT UNSIGNED NOT NULL,
  `total_amount` BIGINT NOT NULL DEFAULT 0, `discount_amount` BIGINT NOT NULL DEFAULT 0,
  `discount_percent` DECIMAL(5,2) NOT NULL DEFAULT 0, `discount_reason` VARCHAR(255) DEFAULT NULL,
  `discount_approved_by` INT UNSIGNED DEFAULT NULL, `payable_amount` BIGINT NOT NULL DEFAULT 0,
  `paid_amount` BIGINT NOT NULL DEFAULT 0,
  `status` VARCHAR(30) NOT NULL DEFAULT 'pending_payment', `method` VARCHAR(30) DEFAULT NULL,
  `is_proforma` TINYINT(1) NOT NULL DEFAULT 1, `kind` VARCHAR(20) DEFAULT 'service',
  `note` VARCHAR(255) DEFAULT NULL, `created_by` INT UNSIGNED DEFAULT NULL, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`), KEY `idx_visit` (`visit_id`), KEY `idx_patient` (`patient_id`), KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
SET @c:=(SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='cw_payments' AND COLUMN_NAME='paid_amount');
SET @s:=IF(@c=0,'ALTER TABLE `cw_payments` ADD COLUMN `paid_amount` BIGINT NOT NULL DEFAULT 0 AFTER `payable_amount`','SELECT 1'); PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;
SET @c:=(SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='cw_payments' AND COLUMN_NAME='kind');
SET @s:=IF(@c=0,'ALTER TABLE `cw_payments` ADD COLUMN `kind` VARCHAR(20) DEFAULT ''service'' AFTER `is_proforma`','SELECT 1'); PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;

CREATE TABLE IF NOT EXISTS `cw_payment_items` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `payment_id` INT UNSIGNED NOT NULL, `service_id` INT UNSIGNED DEFAULT NULL,
  `title` VARCHAR(180) NOT NULL, `qty` INT NOT NULL DEFAULT 1, `unit_price` BIGINT NOT NULL DEFAULT 0,
  `final_price` BIGINT NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`), KEY `idx_payment` (`payment_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ───────────────────────── ۶) خدمات انجام‌شده + عکس ─────────────────────────
CREATE TABLE IF NOT EXISTS `cw_performed_services` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `visit_id` INT UNSIGNED DEFAULT NULL, `patient_id` INT UNSIGNED NOT NULL,
  `service_id` INT UNSIGNED DEFAULT NULL, `doctor_id` INT UNSIGNED DEFAULT NULL, `nurse_primary_id` INT UNSIGNED DEFAULT NULL,
  `room` VARCHAR(40) DEFAULT NULL, `numbing_required` TINYINT(1) NOT NULL DEFAULT 0,
  `numbing_started_at` DATETIME DEFAULT NULL, `numbing_ended_at` DATETIME DEFAULT NULL,
  `started_at` DATETIME DEFAULT NULL, `ended_at` DATETIME DEFAULT NULL, `status` VARCHAR(30) NOT NULL DEFAULT 'queued',
  `bom_consumed` TINYINT(1) NOT NULL DEFAULT 0, `notes` TEXT DEFAULT NULL,
  `created_by` INT UNSIGNED DEFAULT NULL, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, `updated_at` DATETIME DEFAULT NULL,
  PRIMARY KEY (`id`), KEY `idx_visit` (`visit_id`), KEY `idx_patient` (`patient_id`), KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `cw_photos` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `patient_id` INT UNSIGNED NOT NULL, `visit_id` INT UNSIGNED DEFAULT NULL,
  `phase` ENUM('before','after') NOT NULL, `file_path` VARCHAR(255) DEFAULT NULL, `mime` VARCHAR(60) DEFAULT NULL,
  `taken_flag` TINYINT(1) NOT NULL DEFAULT 0, `uploaded_by` INT UNSIGNED DEFAULT NULL, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`), KEY `idx_patient` (`patient_id`), KEY `idx_visit` (`visit_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ───────────────────────── ۷) انبار حرفه‌ای ─────────────────────────────────
CREATE TABLE IF NOT EXISTS `cw_inv_warehouses` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR(80) NOT NULL, `sort` INT NOT NULL DEFAULT 0,
  `is_active` TINYINT(1) NOT NULL DEFAULT 1, PRIMARY KEY (`id`), UNIQUE KEY `uniq_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT IGNORE INTO `cw_inv_warehouses` (`id`,`name`,`sort`) VALUES
 (1,'انبار اصلی',1),(2,'اتاق عمل',2),(3,'لیزر',3),(4,'تزریقات',4),(5,'داروخانه داخلی',5);

CREATE TABLE IF NOT EXISTS `cw_inv_items` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR(150) NOT NULL, `category` VARCHAR(60) DEFAULT NULL,
  `brand` VARCHAR(80) DEFAULT NULL, `unit` VARCHAR(30) DEFAULT 'عدد', `default_warehouse_id` INT UNSIGNED DEFAULT 1,
  `min_stock` INT NOT NULL DEFAULT 0, `purchase_price` BIGINT NOT NULL DEFAULT 0, `supplier` VARCHAR(120) DEFAULT NULL,
  `aliases` VARCHAR(255) DEFAULT NULL, `requires_lot` TINYINT(1) NOT NULL DEFAULT 0, `is_active` TINYINT(1) NOT NULL DEFAULT 1,
  `created_by` INT UNSIGNED DEFAULT NULL, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, `updated_at` DATETIME DEFAULT NULL,
  PRIMARY KEY (`id`), KEY `idx_name` (`name`), KEY `idx_cat` (`category`), KEY `idx_active` (`is_active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `cw_inv_stock` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `item_id` INT UNSIGNED NOT NULL, `warehouse_id` INT UNSIGNED NOT NULL,
  `qty` INT NOT NULL DEFAULT 0, `updated_at` DATETIME DEFAULT NULL,
  PRIMARY KEY (`id`), UNIQUE KEY `uniq_item_wh` (`item_id`,`warehouse_id`), KEY `idx_item` (`item_id`), KEY `idx_wh` (`warehouse_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `cw_inv_batches` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `item_id` INT UNSIGNED NOT NULL, `warehouse_id` INT UNSIGNED NOT NULL,
  `lot_number` VARCHAR(80) DEFAULT NULL, `expiry_date` DATE DEFAULT NULL, `qty_in` INT NOT NULL DEFAULT 0,
  `qty_remaining` INT NOT NULL DEFAULT 0, `purchase_price` BIGINT NOT NULL DEFAULT 0, `supplier` VARCHAR(120) DEFAULT NULL,
  `created_by` INT UNSIGNED DEFAULT NULL, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`), KEY `idx_item_wh` (`item_id`,`warehouse_id`), KEY `idx_exp` (`expiry_date`), KEY `idx_rem` (`qty_remaining`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `cw_inv_movements` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `item_id` INT UNSIGNED NOT NULL, `warehouse_id` INT UNSIGNED NOT NULL,
  `batch_id` INT UNSIGNED DEFAULT NULL, `mtype` VARCHAR(20) NOT NULL, `qty_change` INT NOT NULL, `unit_cost` BIGINT DEFAULT NULL,
  `related_visit_id` INT UNSIGNED DEFAULT NULL, `related_patient_id` INT UNSIGNED DEFAULT NULL,
  `related_performed_service_id` INT UNSIGNED DEFAULT NULL, `related_service_id` INT UNSIGNED DEFAULT NULL,
  `transfer_group` VARCHAR(40) DEFAULT NULL, `reason` VARCHAR(255) DEFAULT NULL, `note` VARCHAR(255) DEFAULT NULL,
  `created_by` INT UNSIGNED DEFAULT NULL, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`), KEY `idx_item` (`item_id`), KEY `idx_wh` (`warehouse_id`), KEY `idx_type` (`mtype`), KEY `idx_created` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `cw_inv_service_bom` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `service_id` INT UNSIGNED NOT NULL, `item_id` INT UNSIGNED NOT NULL,
  `default_qty` INT NOT NULL DEFAULT 1, `is_required` TINYINT(1) NOT NULL DEFAULT 1, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`), UNIQUE KEY `uniq_service_item` (`service_id`,`item_id`), KEY `idx_service` (`service_id`), KEY `idx_item` (`item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ───────────────────────── ۸) لیست قیمت لیزر (قابل ویرایش) ──────────────────
CREATE TABLE IF NOT EXISTS `cw_laser_prices` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `area` VARCHAR(120) NOT NULL, `category` VARCHAR(40) DEFAULT NULL,
  `price` BIGINT NOT NULL DEFAULT 0, `is_package` TINYINT(1) NOT NULL DEFAULT 0, `sort` INT NOT NULL DEFAULT 0,
  `is_active` TINYINT(1) NOT NULL DEFAULT 1, `updated_at` DATETIME DEFAULT NULL,
  PRIMARY KEY (`id`), UNIQUE KEY `uniq_area` (`area`), KEY `idx_cat` (`category`), KEY `idx_active` (`is_active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `cw_laser_price_log` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `price_id` INT UNSIGNED NOT NULL, `old_price` BIGINT DEFAULT NULL,
  `new_price` BIGINT DEFAULT NULL, `changed_by` INT UNSIGNED DEFAULT NULL, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`), KEY `idx_price` (`price_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

DROP TEMPORARY TABLE IF EXISTS `_seed_cw_laser_prices`;
CREATE TEMPORARY TABLE `_seed_cw_laser_prices` LIKE `cw_laser_prices`;
INSERT INTO `_seed_cw_laser_prices` (`area`,`category`,`price`,`is_package`,`sort`) VALUES
 ('کل بدن (گردن تا نوک پا)','package',3300000,1,1),
 ('کل بدن (دست و پا و زیر بغل و بیکینی)','package',2400000,1,2),
 ('کاربردی (ساق، ساعد، زیر بغل، بیکینی)','package',1650000,1,3),
 ('تمام دست','hand_leg',820000,0,10),('ساعد','hand_leg',460000,0,11),('بازو','hand_leg',355000,0,12),
 ('تمام پاها','hand_leg',1300000,0,13),('ران پاها','hand_leg',730000,0,14),('ساق پاها','hand_leg',550000,0,15),
 ('زانو','hand_leg',190000,0,16),('انگشتان','hand_leg',190000,0,17),
 ('کل صورت','face',370000,0,20),('پشت لب','face',130000,0,21),('چانه','face',130000,0,22),
 ('زیر چانه','face',130000,0,23),('خط ریش','face',730000,0,24),
 ('ژنیتال','body',400000,0,30),('نیم تنه جلو','body',820000,0,31),('نیم تنه پشت','body',820000,0,32),
 ('زیر بغل','body',220000,0,33),('گردن','body',175000,0,34),('پشت گردن','body',550000,0,35),
 ('شکم','body',400000,0,36),('گودی کمر','body',370000,0,37),('دور سینه','body',170000,0,38),
 ('کشاله ران','body',280000,0,39),('باسن','body',400000,0,40),('دور ناف','body',550000,0,41),('گوش','body',400000,0,42);
INSERT INTO `cw_laser_prices` (`area`,`category`,`price`,`is_package`,`sort`)
SELECT s.`area`,s.`category`,s.`price`,s.`is_package`,s.`sort`
FROM `_seed_cw_laser_prices` s
WHERE NOT EXISTS (SELECT 1 FROM `cw_laser_prices` p WHERE p.`area`=s.`area`);
DROP TEMPORARY TABLE `_seed_cw_laser_prices`;

-- ───────────────────────── ۹) اعلان‌ها (تأیید دارو/تشخیص و...) ──────────────
CREATE TABLE IF NOT EXISTS `cw_notifications` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `ntype` VARCHAR(40) NOT NULL, `title` VARCHAR(255) NOT NULL,
  `ref_table` VARCHAR(40) DEFAULT NULL, `ref_id` INT UNSIGNED DEFAULT NULL, `is_read` TINYINT(1) NOT NULL DEFAULT 0,
  `created_by` INT UNSIGNED DEFAULT NULL, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`), KEY `idx_read` (`is_read`), KEY `idx_type` (`ntype`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ───────────────────────── ۱۰) اتصال پرستاری به ستون فقرات ──────────────────
SET @c:=(SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='nursing_records' AND COLUMN_NAME='cw_patient_id');
SET @s:=IF(@c=0,'ALTER TABLE `nursing_records` ADD COLUMN `cw_patient_id` INT UNSIGNED NULL AFTER `patient_name`','SELECT 1'); PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;
SET @c:=(SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='nursing_records' AND COLUMN_NAME='cw_visit_id');
SET @s:=IF(@c=0,'ALTER TABLE `nursing_records` ADD COLUMN `cw_visit_id` INT UNSIGNED NULL AFTER `cw_patient_id`','SELECT 1'); PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;

-- دسترسی‌های اختصاصی کاربران (کپ‌های سیستم مادر + install-users.php) — قابلِ‌حملِ MySQL/MariaDB
SET @c:=(SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='users' AND COLUMN_NAME='permissions');
SET @s:=IF(@c=0,'ALTER TABLE `users` ADD COLUMN `permissions` TEXT NULL AFTER `role`','SELECT 1'); PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;

-- ───────────────────────── ۱۱) داده‌ی اولیه: خدمات ─────────────────────────
DROP TEMPORARY TABLE IF EXISTS `_seed_cw_services`;
CREATE TEMPORARY TABLE `_seed_cw_services` LIKE `cw_services`;
INSERT INTO `_seed_cw_services` (`title`,`category`,`base_price`,`needs_doctor`,`needs_numbing`,`needs_photo`,`route_to`,`is_active`) VALUES
 ('ویزیت پوست','ویزیت',0,1,0,0,'none',1),('مشاوره زیبایی','مشاوره',0,1,0,1,'none',1),
 ('تزریق بوتاکس','تزریقات',0,1,0,1,'nurse',1),('تزریق ژل/فیلر','تزریقات',0,1,1,1,'nurse',1),
 ('مزوتراپی','تزریقات',0,1,1,1,'counter3',1),('PRP','تزریقات',0,1,1,1,'counter3',1),
 ('لیزر موهای زائد','لیزر',0,0,0,0,'laser',1),('لیزر CO2','لیزر',0,1,1,1,'counter3',1),
 ('میکرونیدلینگ','پروسیجر',0,1,1,1,'counter3',1),('هایفو','پروسیجر',0,1,0,1,'counter3',1),
 ('پیلینگ شیمیایی','پروسیجر',0,1,0,1,'counter3',1),('کرایوتراپی (زگیل/خال)','پروسیجر',0,1,0,0,'counter3',1);
INSERT INTO `cw_services` (`title`,`category`,`base_price`,`needs_doctor`,`needs_numbing`,`needs_photo`,`route_to`,`is_active`)
SELECT s.`title`,s.`category`,s.`base_price`,s.`needs_doctor`,s.`needs_numbing`,s.`needs_photo`,s.`route_to`,s.`is_active`
FROM `_seed_cw_services` s
WHERE NOT EXISTS (SELECT 1 FROM `cw_services` c WHERE c.`title`=s.`title`);
DROP TEMPORARY TABLE `_seed_cw_services`;

-- ───────────────────────── ۱۲) داده‌ی اولیه: تشخیص‌ها ──────────────────────
DROP TEMPORARY TABLE IF EXISTS `_seed_cw_diagnoses`;
CREATE TEMPORARY TABLE `_seed_cw_diagnoses` LIKE `cw_diagnoses`;
INSERT INTO `_seed_cw_diagnoses` (`title`,`category`) VALUES
 ('ملاسما','لک و پیگمانتاسیون'),('لک آفتاب','لک و پیگمانتاسیون'),('کک‌ومک','لک و پیگمانتاسیون'),
 ('هایپرپیگمانتاسیون پس‌التهابی','لک و پیگمانتاسیون'),('لنتیگو','لک و پیگمانتاسیون'),
 ('آکنه ولگاریس','آکنه'),('آکنه کومدونی','آکنه'),('آکنه سیستیک','آکنه'),('اسکار آکنه','اسکار'),
 ('اسکار جراحی','اسکار'),('اسکار هایپرتروفیک','اسکار'),('کلوئید','اسکار'),
 ('ریزش مو آندروژنیک','ریزش مو'),('تلوژن افلوویوم','ریزش مو'),('آلوپسی آره‌آتا','ریزش مو'),
 ('روزاسه','عروقی و التهابی'),('تلانژکتازی','عروقی و التهابی'),('اریتم صورت','عروقی و التهابی'),
 ('چین و چروک','جوانسازی'),('افتادگی پوست','جوانسازی'),('کاهش حجم صورت','جوانسازی'),('تیرگی دور چشم','جوانسازی'),
 ('منافذ باز','بافت پوست'),('پوست چرب','بافت پوست'),('خشکی پوست','بافت پوست'),
 ('زگیل','ضایعات پوستی'),('خال','ضایعات پوستی'),('میلیا','ضایعات پوستی'),('اسکین تگ','ضایعات پوستی'),('کیست','ضایعات پوستی'),
 ('اگزما','بیماری پوستی'),('درماتیت تماسی','بیماری پوستی'),('پسوریازیس','بیماری پوستی'),('ویتیلیگو','بیماری پوستی'),
 ('قارچ پوستی','عفونی'),('زونا','عفونی'),('کهیر','آلرژیک'),
 ('هیرسوتیسم','مو'),('موهای زائد','مو'),('سلولیت','بدن');
INSERT INTO `cw_diagnoses` (`title`,`category`)
SELECT s.`title`,s.`category`
FROM `_seed_cw_diagnoses` s
WHERE NOT EXISTS (SELECT 1 FROM `cw_diagnoses` d WHERE d.`title`=s.`title`);
DROP TEMPORARY TABLE `_seed_cw_diagnoses`;

-- ───────────────────────── ۱۳) داده‌ی اولیه: داروها (نمونه‌ی قابل گسترش) ─────
DROP TEMPORARY TABLE IF EXISTS `_seed_cw_medications`;
CREATE TEMPORARY TABLE `_seed_cw_medications` LIKE `cw_medications`;
INSERT INTO `_seed_cw_medications` (`title`,`category`,`form`,`common_dosage`) VALUES
 ('ترتینوئین ۰.۰۲۵٪ کرم','موضعی','کرم','شب‌ها لایه نازک'),('ترتینوئین ۰.۰۵٪ کرم','موضعی','کرم','شب‌ها لایه نازک'),
 ('آداپالن ۰.۱٪ ژل','موضعی','ژل','شب‌ها'),('بنزوئیل پراکساید ۲.۵٪','موضعی','ژل','روزی یک‌بار'),
 ('بنزوئیل پراکساید ۵٪','موضعی','ژل','روزی یک‌بار'),('کلیندامایسین ۱٪ محلول','موضعی','محلول','صبح و شب'),
 ('کلیندامایسین/بنزوئیل ژل','موضعی','ژل','شب‌ها'),('اریترومایسین ۴٪ محلول','موضعی','محلول','صبح و شب'),
 ('آزلائیک اسید ۲۰٪','موضعی','کرم','صبح و شب'),('هیدروکینون ۴٪ کرم','موضعی','کرم','شب‌ها لایه نازک'),
 ('هیدروکینون ۲٪ کرم','موضعی','کرم','شب‌ها'),('کوجیک اسید کرم','موضعی','کرم','شب‌ها'),
 ('آربوتین سرم','موضعی','سرم','صبح'),('ویتامین C سرم','موضعی','سرم','صبح'),
 ('نیاسینامید سرم','موضعی','سرم','صبح و شب'),('رتینول سرم','موضعی','سرم','شب‌ها'),
 ('کلوبتازول ۰.۰۵٪ کرم','موضعی-کورتون','کرم','کوتاه‌مدت'),('بتامتازون کرم','موضعی-کورتون','کرم','کوتاه‌مدت'),
 ('مومتازون کرم','موضعی-کورتون','کرم','روزی یک‌بار'),('هیدروکورتیزون ۱٪','موضعی-کورتون','کرم','روزی دوبار'),
 ('تاکرولیموس ۰.۱٪ پماد','موضعی','پماد','روزی دوبار'),('پیمکرولیموس کرم','موضعی','کرم','روزی دوبار'),
 ('کتوکونازول ۲٪ کرم','ضدقارچ','کرم','روزی دوبار'),('کلوتریمازول کرم','ضدقارچ','کرم','روزی دوبار'),
 ('تربینافین کرم','ضدقارچ','کرم','روزی یک‌بار'),('موپیروسین پماد','آنتی‌بیوتیک موضعی','پماد','روزی سه‌بار'),
 ('فوزیدیک اسید کرم','آنتی‌بیوتیک موضعی','کرم','روزی سه‌بار'),('اسید سالیسیلیک ۲٪','موضعی','محلول','شب‌ها'),
 ('مینوکسیدیل ۵٪ محلول','مو','محلول','روزی دوبار روی پوست سر'),('مینوکسیدیل ۲٪ محلول','مو','محلول','روزی دوبار'),
 ('ایزوترتینوئین ۱۰ میلی‌گرم','خوراکی','کپسول','طبق وزن'),('ایزوترتینوئین ۲۰ میلی‌گرم','خوراکی','کپسول','طبق وزن'),
 ('داکسی‌سایکلین ۱۰۰','خوراکی','کپسول','روزی یک تا دو'),('آزیترومایسین ۲۵۰','خوراکی','قرص','طبق دستور'),
 ('فیناستراید ۱ میلی‌گرم','خوراکی','قرص','روزی یک‌بار'),('اسپیرونولاکتون ۲۵','خوراکی','قرص','روزی یک‌بار'),
 ('اسپیرونولاکتون ۱۰۰','خوراکی','قرص','روزی یک‌بار'),('متفورمین ۵۰۰','خوراکی','قرص','طبق دستور'),
 ('پردنیزولون ۵','خوراکی','قرص','کوتاه‌مدت'),('ستیریزین ۱۰','خوراکی-آنتی‌هیستامین','قرص','روزی یک‌بار'),
 ('لوراتادین ۱۰','خوراکی-آنتی‌هیستامین','قرص','روزی یک‌بار'),('فکسوفنادین ۱۸۰','خوراکی-آنتی‌هیستامین','قرص','روزی یک‌بار'),
 ('بایوتین ۵ میلی‌گرم','مکمل','قرص','روزی یک‌بار'),('زینک پلاس','مکمل','قرص','روزی یک‌بار'),
 ('امگا ۳','مکمل','کپسول','روزی یک‌بار'),('ویتامین D','مکمل','قرص','هفتگی'),
 ('کرم ضدآفتاب SPF50','مراقبتی','کرم','هر ۳ ساعت'),('مرطوب‌کننده سرامید','مراقبتی','کرم','روزی دوبار'),
 ('پماد ترکیبی کلیگمن','ترکیبی','پماد','شب‌ها لایه نازک'),('کرم ترکیبی روشن‌کننده','ترکیبی','کرم','شب‌ها'),
 ('محلول ترکیبی ضدریزش','ترکیبی','محلول','روزی یک‌بار'),('کرم بی‌حسی املا','بی‌حسی موضعی','کرم','۳۰ تا ۴۵ دقیقه قبل');
INSERT INTO `cw_medications` (`title`,`category`,`form`,`common_dosage`)
SELECT s.`title`,s.`category`,s.`form`,s.`common_dosage`
FROM `_seed_cw_medications` s
WHERE NOT EXISTS (SELECT 1 FROM `cw_medications` m WHERE m.`title`=s.`title`);
DROP TEMPORARY TABLE `_seed_cw_medications`;

SET FOREIGN_KEY_CHECKS = 1;
-- ============================================================================
--  پایان. جدول‌ها و داده‌ی اولیه آماده‌ی استفاده‌ی ماژول‌ها هستند.
-- ============================================================================
