import os
from github_apis import create_repository_dispatch_event
from env import exit_on_error_and_write_summary
from actions_logging.app_logging import logger
import json


def validate_client_payload(client_payload):
    if not client_payload:
        exit_on_error_and_write_summary("CLIENT_PAYLOAD is not set. Exiting.")
    try:
        json.loads(client_payload)
        logger.info("CLIENT_PAYLOAD is a valid JSON.")
    except json.JSONDecodeError as e:
        exit_on_error_and_write_summary(f"CLIENT_PAYLOAD is not a valid JSON. Error: {e}. Exiting.")
    except Exception as e:
        exit_on_error_and_write_summary(f"Failed to validate CLIENT_PAYLOAD. Error: {e}. Exiting.")
    return True


if __name__ == '__main__':
    repo_name = os.getenv('REPO_NAME')  # 'owner/repo'
    event_type_name = os.getenv('EVENT_TYPE_NAME')
    if not repo_name or not event_type_name:
        exit_on_error_and_write_summary("REPO_NAME or EVENT_TYPE_NAME is not set. Exiting.")
    client_payload = os.getenv('CLIENT_PAYLOAD')  # '{"scriptsVersion": "1.2.3"}'
    if validate_client_payload(client_payload):
        create_repository_dispatch_event(repo_name, event_type_name, client_payload)
        logger.info(f"Successfully created a repository dispatch event for {repo_name} with event_type: {event_type_name} and client_payload: {client_payload}")