import requests
import os
import logging
from typing import List, Dict, Optional

# Configure logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

def get_github_issues(owner: str, repo: str, github_token: str) -> Optional[List[Dict]]:
    """
    Retrieves issues from a GitHub repository.

    Args:
        owner: The owner of the repository.
        repo: The name of the repository.
        github_token: GitHub API token.

    Returns:
        A list of dictionaries, where each dictionary represents an issue.
        Returns None if an error occurs.
    """
    url = f"https://api.github.com/repos/{owner}/{repo}/issues"
    headers = {
        "Authorization": f"token {github_token}",
        "Accept": "application/vnd.github.v3+json"
    }

    try:
        response = requests.get(url, headers=headers)
        response.raise_for_status()  # Raise HTTPError for bad responses (4xx or 5xx)
        return response.json()
    except requests.exceptions.RequestException as e:
        logging.error(f"Error fetching issues: {e}")
        return None
    except ValueError as e:
        logging.error(f"Error decoding JSON response: {e}")
        return None


def main():
    """
    Main function to retrieve and print GitHub issues.
    """
    owner = "kinanajmal"
    repo = "genesis"
    github_token = os.environ.get("GITHUB_TOKEN")

    if not github_token:
        logging.error("GITHUB_TOKEN environment variable not set.")
        return

    issues = get_github_issues(owner, repo, github_token)

    if issues:
        for issue in issues:
            print(f"Issue #{issue['number']}: {issue['title']}")
    else:
        logging.info("No issues found or an error occurred.")


if __name__ == "__main__":
    main()