#!/usr/bin/env python3
#
# Script invokes the login sequence in all available targets.

import argparse
import sys
from typing import Dict
from common import args
from common import aurora
from common import constants


def main():
    if not aurora.check_sb2():
        print(
            "This script should be run inside the Aurora Build Engine "
            + "or in Aurora Platform SDK",
            file=sys.stderr,
        )
        return 1

    arguments = parse_arguments()

    all_targets = aurora.find_targets()
    if len(all_targets) == 0:
        print("No targets found", file=sys.stderr)
        return 1

    targets = aurora.filter_targets(all_targets, arguments.target)
    if len(targets) == 0:
        print("No targets matching target filter found")
        return 1

    log_in_result = log_into_all_targets(
        arguments.user,
        arguments.password,
        targets,
    )
    if not log_in_result:
        print("Could not login to remote")
        return 1

    return 0


def parse_arguments() -> argparse.Namespace:
    parser = argparse.ArgumentParser(description="Login to conan server")
    args.add_target_option(parser)
    args.add_login_argument(parser)
    args.add_password_argument(parser)
    return parser.parse_args()


def log_into_all_targets(
    user: str,
    password: str,
    targets: Dict[str, str],
) -> bool:
    for architecture in targets:
        target = targets[architecture]
        if not log_in_target(user, password, target):
            return False
    return True


def log_in_target(
    user: str,
    password: str,
    target: str,
) -> bool:
    return aurora.run_conan_command(
        "log in",
        target,
        ["remote", "login", "-p", password, constants.CONAN_REPOSITORY_ID, user],
    )


if __name__ == "__main__":
    sys.exit(main())
