#!/usr/bin/env python3

# *****************************************************************************
# Copyright (c) 2025 IBM Corporation and other Contributors.
#
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# *****************************************************************************

import argparse
import os
import sys
from mas.devops.slack import SlackUtil


def notifyProvisionFyre(channel: str, rc: int) -> bool:
    name = os.getenv("CLUSTER_NAME", None)
    if name is None:
        print("CLUSTER_NAME env var must be set")
        sys.exit(1)

    # Support optional metadata from standard IBM CD Toolchains environment variables
    toolchainLink = ""
    toolchainUrl = os.getenv("TOOLCHAIN_PIPELINERUN_URL", None)
    toolchainTriggerName = os.getenv("TOOLCHAIN_TRIGGER_NAME", None)
    if toolchainUrl is not None and toolchainTriggerName is not None:
        toolchainLink = f" | <{toolchainUrl}|Pipeline Run>"

    if rc == 0:
        url = os.getenv("OCP_CONSOLE_URL", None)
        username = os.getenv("OCP_USERNAME", None)
        password = os.getenv("OCP_PASSWORD", None)

        if url is None or username is None or password is None:
            print("OCP_CONSOLE_URL, OCP_USERNAME, and OCP_PASSWORD env vars must all be set")
            sys.exit(1)

        message = [
            SlackUtil.buildHeader(f":glyph-ok: Your IBM DevIT Fyre OCP cluster ({name}) is ready"),
            SlackUtil.buildSection(f"{url}"),
            SlackUtil.buildSection(f"- Username: `{username}`\n - Password: `{password}`"),
            SlackUtil.buildSection(f"<https://beta.fyre.ibm.com/development/vms|Fyre Dashboard>{toolchainLink}")
        ]
    else:
        message = [
            SlackUtil.buildHeader(f":glyph-fail: Your IBM DevIT Fyre OCP cluster ({name}) failed to deploy"),
            SlackUtil.buildSection(f"<https://beta.fyre.ibm.com/development/vms|Fyre Dashboard>{toolchainLink}")
        ]

    response = SlackUtil.postMessageBlocks(channel, message)
    return response.data.get("ok", False)


if __name__ == "__main__":
    # If SLACK_TOKEN or SLACK_CHANNEL env vars are not set then silently exit taking no action
    SLACK_TOKEN = os.getenv("SLACK_TOKEN", None)
    SLACK_CHANNEL = os.getenv("SLACK_CHANNEL", None)
    if SLACK_TOKEN is None or SLACK_CHANNEL is None:
        sys.exit(0)

    # Initialize the properties we need
    parser = argparse.ArgumentParser()

    # Primary Options
    parser.add_argument("--action", required=True)
    parser.add_argument("--rc", required=True, type=int)
    args, unknown = parser.parse_known_args()

    if args.action == "ocp-provision-fyre":
        notifyProvisionFyre(SLACK_CHANNEL, args.rc)
