<?php

if (PHP_SAPI !== 'cli') {
    http_response_code(404);
    exit;
}

$root = dirname(__DIR__);
$version = is_file($root . '/VERSION') ? trim((string)file_get_contents($root . '/VERSION')) : '';
$quotes = is_file($root . '/modules/crm/quotes.php') ? (string)file_get_contents($root . '/modules/crm/quotes.php') : '';
$save = is_file($root . '/modules/crm/quote_save_ajax.php') ? (string)file_get_contents($root . '/modules/crm/quote_save_ajax.php') : '';
$status = is_file($root . '/modules/crm/quote_status_ajax.php') ? (string)file_get_contents($root . '/modules/crm/quote_status_ajax.php') : '';
$lifecycle = is_file($root . '/services/crm/QuoteLifecycleService.php') ? (string)file_get_contents($root . '/services/crm/QuoteLifecycleService.php') : '';
$issue = is_file($root . '/services/billing/BillingIssueService.php') ? (string)file_get_contents($root . '/services/billing/BillingIssueService.php') : '';
$receivables = is_file($root . '/services/billing/BillingReceivablesService.php') ? (string)file_get_contents($root . '/services/billing/BillingReceivablesService.php') : '';
$errors = array();

if ($version !== '7.2.9') {
    $errors[] = 'VERSION no corresponde a 7.2.9.';
}

$required = array(
    array($quotes, 'quote-opportunity-skin', 'capa visual homologada'),
    array($quotes, 'ICY_QUOTES_SYSTEM_STATUSES', 'estados financieros administrados por sistema'),
    array($quotes, 'isSystemManagedStatus(q.status)', 'bloqueo de edición posterior a facturación'),
    array($save, "array('Borrador', 'Enviada', 'Aceptada', 'Rechazada', 'Vencida', 'Anulada')", 'estados editables del guardado'),
    array($status, "array('Borrador', 'Enviada', 'Aceptada', 'Rechazada', 'Vencida', 'Anulada')", 'estados editables del cambio rápido'),
    array($lifecycle, 'systemManagedStatuses', 'protección del ciclo de vida'),
    array($issue, 'invoice_issue_date = ?', 'fecha de emisión obtenida desde Facturación'),
    array($receivables, 'q.payment_date = CASE WHEN c.collection_status', 'fecha de pago obtenida desde cobranza'),
);

foreach ($required as $check) {
    if ($check[0] === '' || strpos($check[0], $check[1]) === false) {
        $errors[] = 'Falta ' . $check[2] . '.';
    }
}

$forbidden = array(
    'formInvoiceIssueDate',
    'formPaymentDate',
    'name="invoice_issue_date"',
    'name="payment_date"',
);

foreach ($forbidden as $needle) {
    if (strpos($quotes, $needle) !== false) {
        $errors[] = 'El formulario todavía contiene ' . $needle . '.';
    }
}

if (strpos($save, "\$_POST['invoice_issue_date']") !== false || strpos($save, "\$_POST['payment_date']") !== false) {
    $errors[] = 'El guardado de cotizaciones todavía acepta fechas manuales.';
}

if (strpos($status, "\$_POST['invoice_issue_date']") !== false || strpos($status, "\$_POST['payment_date']") !== false) {
    $errors[] = 'El cambio rápido todavía acepta fechas manuales.';
}

if (!empty($errors)) {
    foreach ($errors as $error) {
        fwrite(STDERR, 'BLOCKED: ' . $error . PHP_EOL);
    }
    exit(1);
}

echo 'READY: CRM QUOTES V7.2.9' . PHP_EOL;

