-- ============================================================================
--  2026_sprint30b_callcenter_ops.sql — اسپرینت ۳۰ (فاز ۲): عملیاتیِ کال‌سنتر
-- ----------------------------------------------------------------------------
--  ✦ ۱۰۰٪ ADDITIVE و idempotent. هیچ چیزی حذف/بازنویسی نمی‌شود. config.php دست‌نخورده.
--  ✦ روی دیتابیسِ shadicli_nurse اجرا شود. اجرای مجدد امن است.
--  محتوا: نگه‌داری/جستجوی کد پیگیری، کانالِ واقعیِ رزرو، صفِ تماسِ رضایت‌سنجیِ
--  پس از انجامِ کار، و کلیدِ file_number_seed برای گذارِ نهاییِ سلاک طب.
-- ============================================================================
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ── کد پیگیریِ سایت روی نوبت (برای جستجو در کال‌سنتر) ──
SET @c:=(SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='cw_appointments' AND COLUMN_NAME='tracking_code');
SET @s:=IF(@c=0,"ALTER TABLE `cw_appointments` ADD COLUMN `tracking_code` VARCHAR(64) DEFAULT NULL AFTER `external_id`",'SELECT 1'); PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;
SET @c:=(SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='cw_appointments' AND INDEX_NAME='idx_tracking');
SET @s:=IF(@c=0,"ALTER TABLE `cw_appointments` ADD INDEX `idx_tracking` (`tracking_code`)",'SELECT 1'); PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;

-- ── کانالِ واقعیِ رزرو (تلفن/اینستاگرام/واتساپ/حضوری/سایر) جدا از source سیستمی ──
SET @c:=(SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='cw_appointments' AND COLUMN_NAME='channel');
SET @s:=IF(@c=0,"ALTER TABLE `cw_appointments` ADD COLUMN `channel` VARCHAR(20) DEFAULT NULL AFTER `source`",'SELECT 1'); PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;

-- ── تسکِ پیگیریِ رضایتِ پس از انجامِ کار (صفِ کال‌سنتر) ──
CREATE TABLE IF NOT EXISTS `cw_satisfaction_calls` (
  `id`             BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  `patient_id`     INT UNSIGNED NOT NULL,
  `visit_id`       INT UNSIGNED DEFAULT NULL,
  `performed_id`   INT UNSIGNED DEFAULT NULL,   -- cw_performed_services.id (اگر بود)
  `procedure_title`VARCHAR(190) DEFAULT NULL,
  `done_date`      DATE         DEFAULT NULL,
  `doctor_id`      INT UNSIGNED DEFAULT NULL,
  `assigned_to`    INT UNSIGNED DEFAULT NULL,   -- اپراتورِ کال‌سنتر
  `status`         VARCHAR(16)  NOT NULL DEFAULT 'open',   -- open|done|snoozed|cancelled
  `result`         VARCHAR(24)  DEFAULT NULL,   -- satisfied|somewhat|unsatisfied|concern|needs_doctor|no_answer|followup
  `escalated`      TINYINT(1)   NOT NULL DEFAULT 0,
  `note`           VARCHAR(500) DEFAULT NULL,
  `created_by`     INT UNSIGNED DEFAULT NULL,
  `created_at`     DATETIME     NOT NULL,
  `called_at`      DATETIME     DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uq_perf` (`performed_id`),        -- هر خدمتِ انجام‌شده یک‌بار وارد صف
  KEY `idx_patient` (`patient_id`),
  KEY `idx_status` (`status`),
  KEY `idx_assigned` (`assigned_to`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ── تنظیمات: seedِ شمارهٔ پرونده (برای ادامه از آخرین شمارهٔ سلاک طب) + سقفِ روزانه‌ی رضایت‌سنجی ──
INSERT IGNORE INTO `cw_settings` (`k`,`v`,`updated_at`) VALUES
 ('file_number_seed','0',NOW()),
 ('satisfaction_daily_target','15',NOW()),
 ('satisfaction_eligible_days','7',NOW());   -- خدماتِ انجام‌شده‌ی این تعداد روزِ اخیر واجدِ شرایط‌اند

SET FOREIGN_KEY_CHECKS = 1;
-- ============================================================================
--  ROLLBACK (در صورت نیاز، دستی):
--   DROP TABLE IF EXISTS `cw_satisfaction_calls`;
--   ALTER TABLE `cw_appointments` DROP INDEX `idx_tracking`, DROP COLUMN `tracking_code`, DROP COLUMN `channel`;
-- ============================================================================
