-- Petstore Phase 0：真实预约容量模型
-- 前置：20260801_split_service_identity.sql、20260801_create_store_customer.sql、
--       20260801_create_business_event.sql 已执行。

ALTER TABLE t_service_type
    ADD COLUMN duration_minutes INT NOT NULL DEFAULT 60 COMMENT '预计服务时长，30分钟粒度';

ALTER TABLE t_appointment
    ADD COLUMN duration_minutes INT NOT NULL DEFAULT 60 COMMENT '下单时服务时长快照';

ALTER TABLE t_schedule_block
    ADD COLUMN duration_minutes INT NOT NULL DEFAULT 30 COMMENT '连续占用时长，30分钟粒度';

ALTER TABLE t_store
    ADD COLUMN booking_capacity INT NOT NULL DEFAULT 1 COMMENT '门店并发接待数';

-- 系统默认服务时长；未知服务保留 60 分钟安全值。
UPDATE t_service_type
SET duration_minutes = CASE name
    WHEN '洗澡' THEN 60
    WHEN '美容' THEN 120
    WHEN '洗澡+美容' THEN 150
    WHEN '剪指甲' THEN 30
    WHEN '驱虫' THEN 30
    ELSE 60
END;

-- 历史预约形成时没有时长快照，只能按当时服务名称采用稳定默认值回填。
UPDATE t_appointment
SET duration_minutes = CASE service_type
    WHEN '洗澡' THEN 60
    WHEN '美容' THEN 120
    WHEN '洗澡+美容' THEN 150
    WHEN '剪指甲' THEN 30
    WHEN '驱虫' THEN 30
    ELSE 60
END;

-- 验证：以下四项必须全部为 0。
SELECT COUNT(*) AS invalid_service_duration_count
FROM t_service_type
WHERE duration_minutes < 30 OR duration_minutes > 480 OR MOD(duration_minutes, 30) <> 0;

SELECT COUNT(*) AS invalid_appointment_duration_count
FROM t_appointment
WHERE duration_minutes < 30 OR duration_minutes > 480 OR MOD(duration_minutes, 30) <> 0;

SELECT COUNT(*) AS invalid_block_duration_count
FROM t_schedule_block
WHERE duration_minutes < 30 OR duration_minutes > 480 OR MOD(duration_minutes, 30) <> 0;

SELECT COUNT(*) AS invalid_store_capacity_count
FROM t_store
WHERE booking_capacity < 1 OR booking_capacity > 10;
