<?php

require_once(__DIR__ . '/TelnyxMock.php');

define("MOCK_MINIMUM_VERSION", "0.1.0");

if (\Telnyx\TelnyxMock::start()) {
    register_shutdown_function('\Telnyx\TelnyxMock::stop');

    define("MOCK_HOST", "localhost");
    define("MOCK_PORT", \Telnyx\TelnyxMock::getPort());
} else {
    define("MOCK_HOST", getenv("TELNYX_MOCK_HOST") ?: "mock");
    define("MOCK_PORT", getenv("TELNYX_MOCK_PORT") ?: 12111);
}

define("MOCK_URL", "http://" . MOCK_HOST . ":" . MOCK_PORT);

// Send a request to telnyx-mock
$ch = curl_init(MOCK_URL);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$resp = curl_exec($ch);

if (curl_errno($ch)) {
    echo "Couldn't reach telnyx-mock at `" . MOCK_HOST . ":" . MOCK_PORT . "`. Is " .
         "it running? Please see README for setup instructions.\n";
    exit(1);
}

// Retrieve the Telnyx-Mock-Version header
$version = null;
$headers = explode("\n", $resp);
foreach ($headers as $header) {
    $pair = explode(":", $header, 2);
    if ($pair[0] == "Telnyx-Mock-Version") {
        $version = trim($pair[1]);
    }
}

if ($version === null) {
    echo "Could not retrieve Telnyx-Mock-Version header. Are you sure " .
         "that the server at `" . MOCK_HOST . ":" . MOCK_PORT . "` is a telnyx-mock " .
         "instance?";
    exit(1);
}

if ($version != "master" && version_compare($version, MOCK_MINIMUM_VERSION) == -1) {
    echo "Your version of telnyx-mock (" . $version . ") is too old. The minimum " .
         "version to run this test suite is " . MOCK_MINIMUM_VERSION . ". " .
         "Please see its repository for upgrade instructions.\n";
    exit(1);
}

require_once __DIR__ . '/TestCase.php';