import time

from actions_logging.app_logging import logger
from github.env import exit_on_error_and_write_summary, get_required_env_var
from jira.jira_ticket import get_git_info_from_jira, get_jira_ticket_info, get_jira_user


def main():
    get_jira_user()
    fix_version_attached = False
    git_num_is_one = False
    ticket_have_semver_level = False
    ticket_id = get_required_env_var("JIRA_TICKET")
    logger.info(f"ticket_id: {ticket_id}")
    issue = get_jira_ticket_info(ticket_id)
    logger.info(f"issue: {issue}")
    jira_check_max_retries = 5
    jira_check_base_delay_seconds = 10
    for jira_check_attempt in range(jira_check_max_retries + 1):
        jira_git_info = get_git_info_from_jira(issue.id, ticket_id)
        logger.info(f"Attempt {jira_check_attempt + 1}: the result of check is {jira_git_info}")
        if jira_git_info:
            break
        if jira_check_attempt < jira_check_max_retries:
            delay = jira_check_base_delay_seconds * (2**jira_check_attempt)
            logger.info(f"Retrying in {delay} seconds...")
            time.sleep(delay)
    logger.info(f"The result of check for git connections to the ticket is {jira_git_info}")
    if jira_git_info:
        git_num_is_one = True
    if issue.fields.fixVersions:
        fix_version_attached = True
    if issue.fields.customfield_10097:
        ticket_have_semver_level = True

    if fix_version_attached and jira_git_info and ticket_have_semver_level:
        logger.info_green(f"Jira ticket {ticket_id} is good to go")
        return
    error_message = ""
    if not fix_version_attached:
        error_message += "there is no fixVersion attached to the Jira ticket. NOT allowed\n"
    if not git_num_is_one:
        error_message += (
            f"Could not fetch a single correctly linked git repository for Jira ticket {ticket_id}. NOT allowed\n"
        )
    if not ticket_have_semver_level:
        error_message += f"Jira ticket {ticket_id} doesn't have semver level attached"
    exit_on_error_and_write_summary(f"ERROR- {error_message}")


if __name__ == "__main__":
    main()
