import click
import pickle
from kubernetes import client

from codeflare_sdk.cluster.auth import TokenAuthentication
from codeflare_sdk.cli.cli_utils import AuthenticationConfig
import codeflare_sdk.cluster.auth as sdk_auth


@click.command()
@click.option("--server", "-s", type=str, required=True, help="Cluster API address")
@click.option("--token", "-t", type=str, required=True, help="Authentication token")
@click.option(
    "--insecure-skip-tls-verify",
    type=bool,
    help="If true, server's certificate won't be checked for validity",
    default=False,
)
@click.option(
    "--certificate-authority",
    type=str,
    help="Path to cert file for certificate authority",
)
def cli(server, token, insecure_skip_tls_verify, certificate_authority):
    """
    Login to your Kubernetes cluster and save login for subsequent use
    """
    auth = TokenAuthentication(
        token, server, insecure_skip_tls_verify, certificate_authority
    )
    auth.login()
    if not sdk_auth.api_client:  # TokenAuthentication failed
        return

    authConfig = AuthenticationConfig(
        token,
        server,
        insecure_skip_tls_verify,
        certificate_authority,
    )
    with open("auth", "wb") as file:
        pickle.dump(authConfig, file)
    click.echo(f"Logged into '{server}'")