#!/usr/bin/env php
<?php

$rootDir = realpath(__DIR__ . '/../../');
chdir($rootDir);

$laravelVersion = $argv[1];
$versionMap = [
    '5.4' => ['~5.4.0', '~3.4.0'],
    '5.5' => ['~5.5.0', '~3.5.0'],
    '5.6' => ['~5.6.0', '~3.6.0'],
    '5.7' => ['~5.7.0', '~3.7.0'],
    '5.8' => ['~5.8.0', '~3.8.0'],
    '6.x' => ['^6.0', '^4.0']
];

if (!array_key_exists($laravelVersion, $versionMap)) {
    echo "Failed to find version {$laravelVersion} in map.\n";
    printf("Available versions: %s\n", implode(", ", array_keys($versionMap)));
    exit(1);
}

[$laravel, $orchestra] = $versionMap[$laravelVersion];

echo "Altering requirements...\n";
passthru(implode(' ', [
    'composer require --no-update',
    "illuminate/contracts {$laravel}",
    "illuminate/support {$laravel}",
    "illuminate/mail {$laravel}"
]));

echo "Altering dev dependencies...\n";
passthru(implode(' ', [
    'composer require --no-update --dev',
    "orchestra/testbench {$orchestra}"
]));

if ($laravelVersion === '5.4') {
    echo "Applying fix for Laravel 5.4\n";
    passthru('composer require --no-update --dev phpunit/phpunit ^6.0');
}

echo "Removing lockfile...\n";
file_exists("{$rootDir}/composer.lock") and unlink("{$rootDir}/composer.lock");
