<?php
// Workshift service: handle CRUD operations
ob_start(); // Start output buffering to prevent any accidental output

if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

// Set timezone to Vietnam
date_default_timezone_set('Asia/Ho_Chi_Minh');

if (!defined('LUNA_APP')) {
    define('LUNA_APP', true);
}

require_once __DIR__ . '/../config/database.php';
require_once __DIR__ . '/../config/messages.php';
$messages = load_messages();

// Get current user ID for Edit_by field
$currentUserId = (int)($_SESSION['user']['id'] ?? 0);
if ($currentUserId <= 0) {
    $currentUserId = 1; // Default fallback
}

// Unified respond helper
$respond = function (bool $ok, string $message, array $data = []) use ($messages): void {
    $accept = strtolower((string)($_SERVER['HTTP_ACCEPT'] ?? ''));
    $isAjax = isset($_SERVER['HTTP_X_REQUESTED_WITH']) || strpos($accept, 'application/json') !== false;
    
    if ($isAjax) {
        // Clear any buffered output before sending JSON
        while (ob_get_level() > 0) {
            ob_end_clean();
        }
        header('Content-Type: application/json; charset=utf-8');
        $response = ['success' => $ok, 'message' => $message];
        if (!empty($data)) {
            $response = array_merge($response, $data);
        }
        echo json_encode($response, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
        exit; // Stop execution after sending JSON
    } else {
        // For non-AJAX POSTs, redirect back with toast parameters
        if (strtoupper((string)($_SERVER['REQUEST_METHOD'] ?? '')) === 'POST') {
            $param = $ok ? 'success' : 'error';
            $loc = '../index.php?shift&' . $param . '=' . rawurlencode($message);
            header('Location: ' . $loc);
        } else {
            http_response_code($ok ? 200 : 403);
            echo '<!doctype html><html lang="vi"><meta charset="utf-8"><title>Lỗi</title><body style="font-family:system-ui,Segoe UI,Arial">'
            . '<h2 style="color:#b00020;margin:24px 0">' . htmlspecialchars($message, ENT_QUOTES, 'UTF-8') . '</h2>'
            . '<p><a href="../index.php?shift">' . htmlspecialchars(($messages['shift_error_back'] ?? 'Quay lại trang Ca làm việc'), ENT_QUOTES, 'UTF-8') . '</a></p>'
            . '</body></html>';
        }
    }
    exit;
};

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $action = strtolower((string)($_POST['action'] ?? ''));
    
    switch ($action) {
        case 'create':
            $name = trim((string)($_POST['name'] ?? ''));
            $grouptype = trim((string)($_POST['grouptype'] ?? ''));
            $color = trim((string)($_POST['color'] ?? ''));
            $in1 = trim((string)($_POST['in1'] ?? ''));
            $out1 = trim((string)($_POST['out1'] ?? ''));
            $in2 = trim((string)($_POST['in2'] ?? ''));
            $out2 = trim((string)($_POST['out2'] ?? ''));
            $total = trim((string)($_POST['total'] ?? ''));
            $apply = trim((string)($_POST['apply'] ?? ''));
            $sang = trim((string)($_POST['sang'] ?? '0'));
            $trua = trim((string)($_POST['trua'] ?? '0'));
            $chieu = trim((string)($_POST['chieu'] ?? '0'));
            $dem = trim((string)($_POST['dem'] ?? '0'));
            $ngaycong = trim((string)($_POST['Ngaycong'] ?? '0'));
            $time = trim((string)($_POST['time'] ?? ''));
            
            // Validation
            $errors = [];
            if ($name === '') $errors[] = 'NAME';
            if ($grouptype === '' || !is_numeric($grouptype)) $errors[] = 'GROUPTYPE';
            if ($sang === '' || !is_numeric($sang)) $errors[] = 'SANG';
            if ($trua === '' || !is_numeric($trua)) $errors[] = 'TRUA';
            if ($chieu === '' || !is_numeric($chieu)) $errors[] = 'CHIEU';
            if ($dem === '' || !is_numeric($dem)) $errors[] = 'DEM';
            if ($ngaycong === '' || !is_numeric($ngaycong)) $errors[] = 'NGAYCONG';
            if ($time === '') $errors[] = 'TIME';
            
            if (!empty($errors)) {
                $parts = [];
                if (in_array('NAME', $errors)) { $parts[] = $messages['shift_require_name'] ?? 'Tên ca là bắt buộc.'; }
                if (in_array('GROUPTYPE', $errors)) { $parts[] = $messages['shift_require_grouptype'] ?? 'Loại nhóm là bắt buộc.'; }
                if (in_array('SANG', $errors)) { $parts[] = $messages['shift_require_sang'] ?? 'Sáng là bắt buộc.'; }
                if (in_array('TRUA', $errors)) { $parts[] = $messages['shift_require_trua'] ?? 'Trưa là bắt buộc.'; }
                if (in_array('CHIEU', $errors)) { $parts[] = $messages['shift_require_chieu'] ?? 'Chiều là bắt buộc.'; }
                if (in_array('DEM', $errors)) { $parts[] = $messages['shift_require_dem'] ?? 'Đêm là bắt buộc.'; }
                if (in_array('NGAYCONG', $errors)) { $parts[] = $messages['shift_require_ngaycong'] ?? 'Ngày công là bắt buộc.'; }
                if (in_array('TIME', $errors)) { $parts[] = $messages['shift_require_time'] ?? 'Ngày là bắt buộc.'; }
                
                if ($parts) {
                    if (count($parts) >= 2) {
                        $numbered = [];
                        foreach ($parts as $idx => $text) { $numbered[] = ($idx + 1) . '. ' . $text; }
                        $msg = implode("\n", $numbered);
                    } else { 
                        $msg = implode("\n", $parts); 
                    }
                } else { 
                    $msg = $messages['shift_require_data'] ?? 'Dữ liệu bắt buộc bị thiếu'; 
                }
                $respond(false, $msg);
            }
            
            // Convert time strings to SQL Server time format
            $convertTime = function($timeStr) {
                if (empty($timeStr)) return null;
                try {
                    $parts = explode(':', $timeStr);
                    if (count($parts) >= 2) {
                        $hour = (int)$parts[0];
                        $minute = (int)$parts[1];
                        $second = isset($parts[2]) ? (int)$parts[2] : 0;
                        return sprintf('%02d:%02d:%02d', $hour, $minute, $second);
                    }
                } catch (Exception $e) {
                    return null;
                }
                return null;
            };
            
            $conn = db_connect();
            if (!$conn) {
                $respond(false, $messages['shift_error_db_connection'] ?? 'Không thể kết nối cơ sở dữ liệu.');
            }
            
            $sql = "INSERT INTO Workshift (
                        name, grouptype, color, in1, out1, in2, out2, total, 
                        apply, sang, trua, chieu, dem, Ngaycong, time, Edit_by
                    ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
            
            // Convert date string to SQL Server date format
            $convertDate = function($dateStr) {
                if (empty($dateStr)) return null;
                try {
                    $date = new DateTime($dateStr);
                    return $date->format('Y-m-d');
                } catch (Exception $e) {
                    return null;
                }
            };
            
            $params = [
                $name,
                (int)$grouptype,
                ($color === '' ? null : $color),
                $convertTime($in1),
                $convertTime($out1),
                $convertTime($in2),
                $convertTime($out2),
                $convertTime($total),
                ($apply === '' ? null : $apply),
                (int)$sang,
                (int)$trua,
                (int)$chieu,
                (int)$dem,
                (float)$ngaycong,
                $convertDate($time),
                $currentUserId
            ];
            
            $stmt = sqlsrv_query($conn, $sql, $params);
            $ok = $stmt !== false;
            
            if (!$ok) {
                $errors = sqlsrv_errors();
                if ($errors) {
                    error_log("SQL Insert Error: " . print_r($errors, true));
                    error_log("SQL Query: " . $sql);
                    error_log("SQL Params: " . print_r($params, true));
                }
            }
            
            if ($stmt) sqlsrv_free_stmt($stmt);
            db_disconnect($conn);
            
            $msg = $ok 
                ? ($messages['shift_success_created'] ?? 'Đã thêm ca làm việc thành công.')
                : ($messages['shift_error_create'] ?? 'Không thể thêm ca làm việc.');
            
            $respond($ok, $msg);
            break;
            
        default:
            $respond(false, $messages['shift_error_invalid_action'] ?? 'Hành động không hợp lệ.');
            break;
    }
} else {
    $respond(false, $messages['shift_error_invalid_method'] ?? 'Phương thức không hợp lệ.');
}

