import logging

import requests

from django.contrib.auth.models import User

from allianceauth import NAME
from allianceauth.srp.providers import esi

from .models import SrpUserRequest

logger = logging.getLogger(__name__)


class SRPManager:

    @staticmethod
    def get_kill_id(killboard_link):
        num_set = '0123456789'
        kill_id = ''.join([c for c in killboard_link if c in num_set])
        return kill_id

    @staticmethod
    def get_kill_data(kill_id):
        url = ("https://zkillboard.com/api/killID/%s/" % kill_id)
        headers = {
            'User-Agent': NAME,
            'Content-Type': 'application/json',
        }
        r = requests.get(url, headers=headers)
        result = r.json()[0]
        if result:
            killmail_id = result['killmail_id']
            killmail_hash = result['zkb']['hash']
            km = esi.client.Killmails.get_killmails_killmail_id_killmail_hash(
                killmail_id=killmail_id,
                killmail_hash=killmail_hash
            ).result()
        else:
            raise ValueError("Invalid Kill ID")
        if km:
            ship_type = km['victim']['ship_type_id']
            logger.debug(
                f"Ship type for kill ID {kill_id} is {ship_type}"
            )
            ship_value = result['zkb']['totalValue']
            logger.debug(
                f"Total loss value for kill id {kill_id} is {ship_value}"
            )
            victim_id = km['victim']['character_id']
            return ship_type, ship_value, victim_id
        else:
            raise ValueError("Invalid Kill ID or Hash.")

    @staticmethod
    def pending_requests_count_for_user(user: User):
        """returns the number of open SRP requests for given user
        or None if user has no permission"""
        if user.has_perm("auth.srp_management"):
            return SrpUserRequest.objects.filter(srp_status="Pending").count()
        else:
            return None
