-- ====================================================================
-- 직원별 기본 근무조(주간/야간) 설정 기능 구현을 위한 DB 스키마 변경
-- 작성일: 2026-01-10
-- 목적: 야간조 직원이 퇴근 전 새벽 6시에 주간 체크리스트가 표시되는 문제 해결
-- ====================================================================

-- 1. employee_details 테이블에 기본 근무조 컬럼 추가
ALTER TABLE employee_details 
ADD COLUMN default_shift ENUM('DAY', 'NIGHT') DEFAULT 'DAY' 
COMMENT '기본 근무조 (DAY=주간, NIGHT=야간)';

-- 2. attendance_logs 테이블에 출근 시 결정된 근무조 컬럼 추가
ALTER TABLE attendance_logs 
ADD COLUMN shift ENUM('DAY', 'NIGHT') NULL 
COMMENT '출근 시 결정된 근무조 (employee_details.default_shift 기반)';

-- ====================================================================
-- 기존 데이터 마이그레이션 (선택사항)
-- ====================================================================

-- 직원별 기본 근무조 자동 설정
-- work_schedule_templates의 주 스케줄을 기반으로 판단
-- 시간대: 주간(DAY) = 08:00~20:00, 야간(NIGHT) = 20:00~08:00
UPDATE employee_details ed
SET default_shift = (
    SELECT 
        CASE 
            WHEN SUM(
                CASE 
                    WHEN wst.is_off = 0 AND (
                        TIME(wst.start_time) >= '20:00:00' OR 
                        TIME(wst.start_time) < '08:00:00'
                    ) THEN 1 
                    ELSE 0 
                END
            ) > SUM(
                CASE 
                    WHEN wst.is_off = 0 AND (
                        TIME(wst.start_time) >= '08:00:00' AND 
                        TIME(wst.start_time) < '20:00:00'
                    ) THEN 1 
                    ELSE 0 
                END
            )
            THEN 'NIGHT'
            ELSE 'DAY'
        END
    FROM work_schedule_templates wst
    WHERE wst.user_id = ed.user_id
    HAVING COUNT(*) > 0
)
WHERE EXISTS (
    SELECT 1 FROM work_schedule_templates wst 
    WHERE wst.user_id = ed.user_id
);

-- 설정되지 않은 직원은 기본값(DAY) 유지 (이미 DEFAULT 'DAY'로 설정됨)

-- ====================================================================
-- 검증 쿼리
-- ====================================================================

-- 1. 컬럼 추가 확인
SELECT 
    COLUMN_NAME, 
    COLUMN_TYPE, 
    COLUMN_DEFAULT, 
    COLUMN_COMMENT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
  AND TABLE_NAME = 'employee_details'
  AND COLUMN_NAME = 'default_shift';

SELECT 
    COLUMN_NAME, 
    COLUMN_TYPE, 
    IS_NULLABLE,
    COLUMN_COMMENT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
  AND TABLE_NAME = 'attendance_logs'
  AND COLUMN_NAME = 'shift';

-- 2. 직원별 기본 근무조 설정 현황
SELECT 
    u.id,
    u.username,
    ed.full_name,
    ed.default_shift as '기본근무조',
    u.role
FROM users u
JOIN employee_details ed ON u.id = ed.user_id
WHERE u.status = 'active'
ORDER BY ed.default_shift, ed.full_name;

-- 3. 근무조별 직원 수
SELECT 
    default_shift as '근무조',
    COUNT(*) as '직원수'
FROM employee_details
GROUP BY default_shift;
