import os

device_chromecdm_903 = {
    "name": "chromecdm_903",
    "description": "chrome cdm windows 903",
    "security_level": 3,
    "session_id_type": "chrome",
    "private_key_available": True,
    "vmp": False,
    "send_key_control_nonce": False,
}

device_android_general = {
    "name": "android_general",
    "description": "android_general lvl3 security level",
    "security_level": 3,
    "session_id_type": "android",
    "private_key_available": True,
    "vmp": False,
    "send_key_control_nonce": True,
}

devices_available = [
    device_android_general,
    device_chromecdm_903,
]

device_android_generic_8162 = {
    'name': 'android_generic_8162',
    'description': 'Android Studio CDM',
    'security_level': 3,
    'session_id_type': 'android',
    'private_key_available': True,
    'vmp': False,
    'send_key_control_nonce': True
}

FILES_FOLDER = "devices"


class DeviceConfig:
    def __init__(self, device):
        self.device_name = device["name"]
        self.description = device["description"]
        self.security_level = device["security_level"]
        self.session_id_type = device["session_id_type"]
        self.private_key_available = device["private_key_available"]
        self.vmp = device["vmp"]
        self.send_key_control_nonce = device["send_key_control_nonce"]
        if "keybox_filename" in device:
            self.keybox_filename = os.path.join(
                os.path.dirname(__file__),
                FILES_FOLDER,
                device["name"],
                device["keybox_filename"],
            )
        else:
            self.keybox_filename = os.path.join(
                os.path.dirname(__file__), FILES_FOLDER, device["name"], "keybox"
            )
        if "device_cert_filename" in device:
            self.device_cert_filename = os.path.join(
                os.path.dirname(__file__),
                FILES_FOLDER,
                device["name"],
                device["device_cert_filename"],
            )
        else:
            self.device_cert_filename = os.path.join(
                os.path.dirname(__file__), FILES_FOLDER, device["name"], "device_cert"
            )
        if "device_private_key_filename" in device:
            self.device_private_key_filename = os.path.join(
                os.path.dirname(__file__),
                FILES_FOLDER,
                device["name"],
                device["device_private_key_filename"],
            )
        else:
            self.device_private_key_filename = os.path.join(
                os.path.dirname(__file__),
                FILES_FOLDER,
                device["name"],
                "device_private_key",
            )
        if "device_client_id_blob_filename" in device:
            self.device_client_id_blob_filename = os.path.join(
                os.path.dirname(__file__),
                FILES_FOLDER,
                device["name"],
                device["device_client_id_blob_filename"],
            )
        else:
            self.device_client_id_blob_filename = os.path.join(
                os.path.dirname(__file__),
                FILES_FOLDER,
                device["name"],
                "device_client_id_blob",
            )
        if "device_vmp_blob_filename" in device:
            self.device_vmp_blob_filename = os.path.join(
                os.path.dirname(__file__),
                FILES_FOLDER,
                device["name"],
                device["device_vmp_blob_filename"],
            )
        else:
            self.device_vmp_blob_filename = os.path.join(
                os.path.dirname(__file__),
                FILES_FOLDER,
                device["name"],
                "device_vmp_blob",
            )

    def __repr__(self):
        return (
            "DeviceConfig(name={}, description={}, security_level={}, session_id_type={}, private_key_available={}, vmp={})"
        ).format(
            self.device_name,
            self.description,
            self.security_level,
            self.session_id_type,
            self.private_key_available,
            self.vmp,
        )
