<?php

require_once('../../library/P4/Time/Time.php');
require_once('../../library/P4/Connection/Connection.php');
require_once('../../library/P4/Connection/ConnectionInterface.php');
require_once('../../library/P4/Connection/AbstractConnection.php');
require_once('../../library/P4/Connection/Extension.php');
require_once('../../library/P4/Exception.php');
require_once('../../library/P4/Validate/ValidateInterface.php');
require_once('../../library/P4/Validate/AbstractValidate.php');
require_once('../../library/P4/Validate/KeyName.php');
require_once('../../library/P4/Validate/CounterName.php');
require_once('../../library/P4/Model/Connected/ConnectedInterface.php');
require_once('../../library/P4/Model/Connected/ConnectedAbstract.php');
require_once('../../library/P4/OutputHandler/Limit.php');
require_once('../../library/P4/Model/Connected/Iterator.php');
require_once('../../library/Record/Exception/Exception.php');
require_once('../../library/Record/Exception/NotFoundException.php');
require_once('../../library/P4/Counter/Exception/NotFoundException.php');
require_once('../../library/P4/Counter/AbstractCounter.php');
require_once('../../library/P4/Key/Key.php');
require_once('../../library/P4/Connection/Exception/ServiceNotFoundException.php');
require_once('../../library/P4/Connection/CommandResult.php');
require_once('../../library/P4/Log/Logger.php');
require_once('../../library/P4/Environment/Environment.php');
require_once('../../library/P4/Model/Fielded/FieldedInterface.php');
require_once('../../library/P4/Model/Fielded/FieldedAbstract.php');
require_once('../../library/P4/Spec/SingularAbstract.php');
require_once('../../library/P4/Spec/PluralAbstract.php');
require_once('../../library/P4/Spec/Client.php');
require_once('../../library/P4/Spec/Group.php');
require_once('../../library/P4/Spec/User.php');
require_once('../../library/P4/Validate/SpecName.php');
require_once('../../library/P4/Validate/UserName.php');
require_once('../../library/P4/Model/Fielded/Iterator.php');
require_once('../../library/P4/Filter/Utf8.php');
require_once('../../library/Record/Key/AbstractKey.php');
require_once('../../module/Projects/src/Projects/Model/Project.php');
require_once('../../module/Users/src/Users/Model/Config.php');
require_once('../../module/Users/src/Users/Model/Group.php');
require_once('../../module/Users/src/USers/Model/User.php');

$p4port = 'localhost:1666';
$p4user = 'llam';

// Check to see user passed 2 arguments
if (!isset($argv[2])) {
    echo "Usage: swarm-move-followers.php [source project id] [target project id]";
    return;
}

// Make a Perforce connection
try {
    $connection = new \P4\Connection\Extension($p4port, $p4user, null, null, null);
    $connection->connect();
} catch (\Exception $e) {
}

$projects = new \Projects\Model\Project;

// Check if source project exists
// Note: project id has the form $username-$projectname
if(!$projects->exists($argv[1], $connection)) {
    echo $argv[1] . " project does not exist.";
    return;
};

// Check if target project exists
if(!$projects->exists($argv[2], $connection)) {
    echo $argv[2] . " project does not exist.";
    return;
};

// fetch followers from source project
$followers = \Users\Model\Config::fetchFollowerIds(
    $argv[1],
    'project',
    $connection
);

\P4\Connection\Connection::setDefaultConnection($connection);

foreach ($followers as $follower) {
    $user = new \Users\Model\User();
    $user->setId($follower);
    $user->setConnection($connection);
    $config = $user->getConfig();
    $config->addFollow($argv[2], 'project');
    $config->save();
}