import re
import os
import sys


def add_to_github_summary(message):
    os.system(f'echo "{message}" >> $GITHUB_STEP_SUMMARY')
    print(message)


def is_valid_version(version_string):
    if version_string == "": 
        return True
    for pat in all_versions:
        if re.match(pat, version_string):
            return True
    return False


def is_official_version(var_name, version_string):
    patterns = official_versions
    if "ENV" in var_name:
        patterns = env_versions
    for pat in patterns:
        if re.match(pat, version_string):
            return True
    return False


def check_is_official(var_name, version_str):
    if is_official_version(var_name, version_str):
        os.system(f'''echo "{var_name}=true" >> $GITHUB_ENV''')
        print(f"{var_name} set to true")
    else:
        os.system(f'''echo "{var_name}=false" >> $GITHUB_ENV''')
        print(f"{var_name} set to false")


def validate_lambda_version(version_string, env_var_str):
    if not version_string:
        message = ":x: Error: VERSION_TO_DEPLOY is not set."
        add_to_github_summary(message)
        sys.exit(1)
    if not is_valid_version(version_string):
        message = f":x: Error: VERSION_TO_DEPLOY: {version_string} is not valid."
        add_to_github_summary(message)
        sys.exit(1)
    if not is_valid_version(env_var_str):
        message = f":x: Error: ENV_FILE_VERSION: {env_var_str} is not valid."
        add_to_github_summary(message)
        sys.exit(1)


semver_pattern_no_v = r"^\d+\.\d+\.\d+$"
semver_pattern = r"^v\d+\.\d+\.\d+$"
custom_pattern = r"^[a-zA-Z0-9-]+-\d+-[a-fA-F0-9]{7}$"
env_pattern = r"^v\d+-ENV_VARS$"
official_versions = [semver_pattern_no_v, semver_pattern, env_pattern]
env_versions = [env_pattern]
all_versions = official_versions + [custom_pattern]
env_var_version = os.getenv('ENV_FILE_VERSION')
version_str = os.getenv('VERSION_TO_DEPLOY')
validate_lambda_version(version_str, env_var_version)
check_is_official("IS_OFFICIAL_VERSION", version_str)
check_is_official("IS_OFFICIAL_ENV_VERSION", env_var_version)
print("Check of versions run successfully")
