import requests
import json

from typing import Any


class MockedResponse:
    def __init__(self, json_data: bytes, status_code: int) -> None:
        self.json_data = json_data
        self.status_code = status_code

    def json(self) -> Any:
        return json.loads(self.json_data)

    def raise_for_status(self) -> None:
        if self.status_code not in [200, 201]:
            raise requests.exceptions.HTTPError()


def mocked_requests_get(*args, **kwargs) -> MockedResponse:
    if "pulls" in args[0]:
        pr = args[0].split("/")[-1]
        with open(f"tests/fixtures/pulls_{pr}.json") as f:
            data = f.read()
        return MockedResponse(data, 200)
    elif "compare" in args[0]:
        branch, commit_sha = args[0].split("/")[-1].split("...")
        with open(f"tests/fixtures/compare_{branch}_{commit_sha}.json") as f:
            data = f.read()
        return MockedResponse(data, 200)
    elif "comments" in args[0]:
        pr = args[0].split("/")[-2]
        with open(f"tests/fixtures/comments_{pr}.json") as f:
            data = f.read()
        return MockedResponse(data, 200)
