<?php

namespace App\Utils;

/**
 * Validaciones mejoradas para el sistema de importación
 */
class ImportValidator
{
    /**
     * Valida que el grado_id exista en la base de datos
     */
    public static function validateGradoId($pdo, $grado_id)
    {
        $stmt = $pdo->prepare("SELECT COUNT(*) FROM grados WHERE id = ?");
        $stmt->execute([$grado_id]);
        return $stmt->fetchColumn() > 0;
    }

    /**
     * Valida formato de email
     */
    public static function validateEmail($email)
    {
        return empty($email) || filter_var($email, FILTER_VALIDATE_EMAIL);
    }

    /**
     * Valida formato de teléfono chileno
     */
    public static function validatePhone($phone)
    {
        if (empty($phone)) return true;
        // Acepta formatos: +56912345678, 912345678, 221234567
        return preg_match('/^(\+56)?[2-9]\d{7,8}$/', preg_replace('/[\s\-()]/', '', $phone));
    }

    /**
     * Valida fecha de nacimiento razonable
     */
    public static function validateBirthDate($fecha_nac)
    {
        if (empty($fecha_nac)) return false;

        $date = \DateTime::createFromFormat('Y-m-d', $fecha_nac);
        if (!$date) return false;

        $now = new \DateTime();
        $age = $now->diff($date)->y;

        // Estudiantes entre 3 y 25 años
        return $age >= 3 && $age <= 25;
    }

    /**
     * Valida parentesco permitido
     */
    public static function validateParentesco($parentesco)
    {
        $parentescos_validos = [
            'PADRE',
            'MADRE',
            'ABUELO',
            'ABUELA',
            'TIO',
            'TIA',
            'HERMANO',
            'HERMANA',
            'PRIMO',
            'PRIMA',
            'TUTOR',
            'APODERADO',
            'OTRO'
        ];

        return empty($parentesco) || in_array(strtoupper($parentesco), $parentescos_validos);
    }

    /**
     * Valida que no haya caracteres sospechosos (prevención básica de inyección)
     */
    public static function validateSafeString($string)
    {
        // Bloquear caracteres SQL peligrosos
        $dangerous_chars = ['<script', 'javascript:', 'SELECT ', 'INSERT ', 'UPDATE ', 'DELETE '];
        $string_upper = strtoupper($string);

        foreach ($dangerous_chars as $char) {
            if (strpos($string_upper, strtoupper($char)) !== false) {
                return false;
            }
        }
        return true;
    }
}
