import os
from github.env import get_required_env_var, exit_on_error_and_write_summary
from git.constants import VERSION_TO_DEPLOY, ENV_FILE_VERSION
from jira.jira_apis import update_issue
from jira.consts import MS_NAME_KEY_ID, MS_VERSION_KEY_ID, GW_SERVICE_NAME_KEY_ID, GW_SERVICE_VERSION_KEY_ID, ENV_VARS_VERSION_KEY_ID
from actions_logging.app_logging import logger


def create_payload(ms_name):
    try:
        logger.info(f"creating payload for jira with {ms_name}")
        payload = {
            "fields": {
                MS_NAME_KEY_ID: f"{ms_name}"
            }
        }
        ms_version = os.getenv(VERSION_TO_DEPLOY)
        env_vers_version = os.getenv(ENV_FILE_VERSION)
        if not ms_version and not env_vers_version:
            exit_on_error_and_write_summary("NEW_VERSION or ENV_VARS_VERSION env var is required")
        if ms_version:
            logger.info(f"adding ms version {ms_version} to payload")
            payload["fields"][MS_VERSION_KEY_ID] = f"{ms_version}"
        if env_vers_version:
            logger.info(f"adding env vars version {env_vers_version} to payload")
            payload["fields"][ENV_VARS_VERSION_KEY_ID] = f"{env_vers_version}"
        gw_service_name = os.getenv("GW_SERVICE_NAME")
        gw_service_version = os.getenv("GW_SERVICE_VERSION")
        if gw_service_version and gw_service_name:
            logger.info(f"adding gw service name {gw_service_name} and version {gw_service_version} to payload")
            payload["fields"][GW_SERVICE_NAME_KEY_ID] = f"{gw_service_name}"
            payload["fields"][GW_SERVICE_VERSION_KEY_ID] = f"{gw_service_version}"
        return payload
    except Exception as e:
        exit_on_error_and_write_summary(f"failed in create_payload: {e}")


def main():
    try:
        ticket_id = get_required_env_var("JIRA_TICKET")
        ms_name = get_required_env_var("SVC_NAME")
        logger.info_green(f"updating {ms_name} in jira ticket {ticket_id}")
        payload = create_payload(ms_name)
        update_issue(ticket_id, payload)
        logger.info_green(f"jira ticket {ticket_id} updated successfully")
    except Exception as e:
        exit_on_error_and_write_summary(f"failed in put_version_in_jira.main: {e}")


if __name__ == '__main__':
    main()
