<?php
/**
 * Kriter Tarihçesi API
 * Criteria history CRUD işlemleri
 */

require_once 'config.php';
require_once 'includes/Database.php';
require_once 'includes/Auth.php';

Auth::requireAdmin();

header('Content-Type: application/json');

$db = new Database();
$action = $_POST['action'] ?? $_GET['action'] ?? '';

// Hata ayıklama için
$response = ['success' => false, 'message' => ''];

try {
    switch ($action) {
        case 'list':
            // Belirli bir kriter için tarihçeyi listele
            $criteriaCode = $_GET['criteria_code'] ?? '';

            if (empty($criteriaCode)) {
                $response['message'] = 'Kriter kodu gerekli';
                break;
            }

            $history = $db->fetchAll("
                SELECT h.*, u.full_name as created_by_name
                FROM criteria_history h
                LEFT JOIN users u ON h.created_by = u.id
                WHERE h.criteria_code = ?
                ORDER BY h.start_date DESC
            ", [$criteriaCode]);

            $response['success'] = true;
            $response['data'] = $history;
            break;

        case 'add':
            // Yeni tarihçe kaydı ekle
            $criteriaCode = $_POST['criteria_code'] ?? '';
            $pointValue = floatval($_POST['point_value'] ?? 0);
            $startDate = $_POST['start_date'] ?? '';
            $endDate = $_POST['end_date'] ?? null;
            $notes = trim($_POST['notes'] ?? '');
            $userId = $_SESSION['user_id'] ?? null;

            if (empty($criteriaCode) || empty($startDate)) {
                $response['message'] = 'Kriter kodu ve başlangıç tarihi gerekli';
                break;
            }

            // Tarih çakışması kontrolü
            $conflictCheck = $db->fetchOne("
                SELECT COUNT(*) as count
                FROM criteria_history
                WHERE criteria_code = ?
                  AND id != 0
                  AND (
                      (start_date <= ? AND (end_date IS NULL OR end_date >= ?))
                      OR (start_date <= ? AND (end_date IS NULL OR end_date >= ?))
                      OR (start_date >= ? AND (end_date IS NULL OR end_date <= ?))
                  )
            ", [
                $criteriaCode,
                $startDate, $startDate,
                $endDate ?? '9999-12-31', $endDate ?? '9999-12-31',
                $startDate, $endDate ?? '9999-12-31'
            ]);

            if ($conflictCheck && $conflictCheck['count'] > 0) {
                $response['message'] = 'Bu tarih aralığında zaten bir kayıt var! Lütfen tarih aralıklarını kontrol edin.';
                break;
            }

            $result = $db->query("
                INSERT INTO criteria_history (criteria_code, point_value, start_date, end_date, notes, created_by)
                VALUES (?, ?, ?, ?, ?, ?)
            ", [$criteriaCode, $pointValue, $startDate, $endDate ?: null, $notes, $userId]);

            if ($result) {
                $response['success'] = true;
                $response['message'] = 'Tarihçe kaydı başarıyla eklendi';
            } else {
                $response['message'] = 'Veritabanı hatası: ' . $db->getError();
            }
            break;

        case 'edit':
            // Tarihçe kaydını güncelle
            $id = intval($_POST['id'] ?? 0);
            $pointValue = floatval($_POST['point_value'] ?? 0);
            $startDate = $_POST['start_date'] ?? '';
            $endDate = $_POST['end_date'] ?? null;
            $notes = trim($_POST['notes'] ?? '');

            if ($id <= 0 || empty($startDate)) {
                $response['message'] = 'ID ve başlangıç tarihi gerekli';
                break;
            }

            // Mevcut kaydı al
            $existing = $db->fetchOne("SELECT criteria_code FROM criteria_history WHERE id = ?", [$id]);
            if (!$existing) {
                $response['message'] = 'Kayıt bulunamadı';
                break;
            }

            // Tarih çakışması kontrolü (kendi ID'si hariç)
            $conflictCheck = $db->fetchOne("
                SELECT COUNT(*) as count
                FROM criteria_history
                WHERE criteria_code = ?
                  AND id != ?
                  AND (
                      (start_date <= ? AND (end_date IS NULL OR end_date >= ?))
                      OR (start_date <= ? AND (end_date IS NULL OR end_date >= ?))
                      OR (start_date >= ? AND (end_date IS NULL OR end_date <= ?))
                  )
            ", [
                $existing['criteria_code'],
                $id,
                $startDate, $startDate,
                $endDate ?? '9999-12-31', $endDate ?? '9999-12-31',
                $startDate, $endDate ?? '9999-12-31'
            ]);

            if ($conflictCheck && $conflictCheck['count'] > 0) {
                $response['message'] = 'Bu tarih aralığında zaten bir kayıt var! Lütfen tarih aralıklarını kontrol edin.';
                break;
            }

            $result = $db->query("
                UPDATE criteria_history
                SET point_value = ?, start_date = ?, end_date = ?, notes = ?
                WHERE id = ?
            ", [$pointValue, $startDate, $endDate ?: null, $notes, $id]);

            if ($result) {
                $response['success'] = true;
                $response['message'] = 'Tarihçe kaydı başarıyla güncellendi';
            } else {
                $response['message'] = 'Veritabanı hatası: ' . $db->getError();
            }
            break;

        case 'delete':
            // Tarihçe kaydını sil
            $id = intval($_POST['id'] ?? $_GET['id'] ?? 0);

            if ($id <= 0) {
                $response['message'] = 'ID gerekli';
                break;
            }

            $result = $db->query("DELETE FROM criteria_history WHERE id = ?", [$id]);

            if ($result) {
                $response['success'] = true;
                $response['message'] = 'Tarihçe kaydı başarıyla silindi';
            } else {
                $response['message'] = 'Veritabanı hatası: ' . $db->getError();
            }
            break;

        default:
            $response['message'] = 'Geçersiz işlem';
    }
} catch (Exception $e) {
    $response['success'] = false;
    $response['message'] = 'Hata: ' . $e->getMessage();
}

echo json_encode($response);
