#!/usr/bin/env python

from spyt.dependency_utils import require_yt_client
require_yt_client()

from yt.wrapper import YtClient  # noqa: E402
from yt.wrapper.http_helpers import get_user_name  # noqa: E402
from spyt.enabler import SpytEnablers  # noqa: E402
from spyt.launch_utils import add_default_launch_options, add_livy_options  # noqa: E402
from spyt.standalone import start_livy_server  # noqa: E402
from spyt.utils import default_token, default_tvm_id, default_tvm_secret, get_default_arg_parser  # noqa: E402


def main(raw_args=None):
    parser = get_default_arg_parser(description="Livy Launch")
    add_default_launch_options(parser)
    add_livy_options(parser)

    parser.add_argument('--spark-master-address', required=False, type=str)
    parser.add_argument('--master-group-id', required=False, type=str)

    args, unknown_args = parser.parse_known_args(args=raw_args)

    yt_client = YtClient(proxy=args.proxy, token=default_token())

    start_livy_server(operation_alias=args.operation_alias,
                      discovery_path=args.discovery_path,
                      pool=args.pool or get_user_name(client=yt_client),
                      enable_tmpfs=args.enable_tmpfs,
                      network_project=args.network_project,
                      tvm_id=default_tvm_id(),
                      tvm_secret=default_tvm_secret(),
                      params=args.params,
                      spark_cluster_version=args.spyt_version,
                      enablers=SpytEnablers(
                          enable_mtn=args.enable_mtn,
                          enable_tcp_proxy=args.enable_tcp_proxy,
                          enable_squashfs=args.enable_squashfs
                      ),
                      enable_preference_ipv6=args.enable_preference_ipv6,
                      client=yt_client,
                      preemption_mode=args.preemption_mode,
                      cluster_log_level=args.cluster_log_level,
                      livy_driver_cores=args.livy_driver_cores,
                      livy_driver_memory=args.livy_driver_memory,
                      livy_max_sessions=args.livy_max_sessions,
                      spark_master_address=args.spark_master_address,
                      rpc_job_proxy=args.rpc_job_proxy,
                      rpc_job_proxy_thread_pool_size=args.rpc_job_proxy_thread_pool_size,
                      tcp_proxy_range_start=args.tcp_proxy_range_start,
                      tcp_proxy_range_size=args.tcp_proxy_range_size,
                      enable_stderr_table=args.enable_stderr_table,
                      master_group_id=args.master_group_id,
                      group_id=args.group_id,
                      cluster_java_home=args.cluster_java_home)


if __name__ == '__main__':
    main()
