import logging

from django.conf import settings

from app.api import api
from app.karza.accessor import KarzaAccessor
from app.util import util

log = logging.getLogger(__name__)


class Karza:
    DUMMY_ADDRESS = {
        "street": "street",
        "city": "city",
        "state": "state",
        "pincode": "123456",
    }

    @classmethod
    def verify_user_epf(cls, employer_name, employee_name):
        return KarzaAccessor.verify_employee_details(employer_name, employee_name)

    @classmethod
    def verify_user_bank(cls, account_number, ifsc_code):
        return KarzaAccessor.verify_bank_details(account_number, ifsc_code)

    @classmethod
    def perform_kyc_ocr(cls, document_content, document_type, sub_type):
        if settings.DEBUG:
            return api.SUCCESS, {"address": cls.DUMMY_ADDRESS}

        status, response = KarzaAccessor.get_ocr(document_content, document_type)
        if util.is_status_failed(status):
            log.error('OCR failed')
            return status, None

        ocr_data = None
        for ocr in response['result']['documents']:
            if ocr["subType"] == sub_type:
                ocr_data = ocr['additionalDetails']['addressSplit']

        if not ocr_data:
            return api.UNABLE_TO_GET_OCR_DETAILS, None

        address = {
            "street": ocr_data["street"],
            "city": ocr_data["city"],
            "state": ocr_data["state"],
            "pincode": ocr_data["pin"],
        }

        return api.SUCCESS, {"address": address}

    @classmethod
    def generate_aadhar_otp(cls, aadhar):
        return KarzaAccessor.generate_aadhar_otp(aadhar)

    @classmethod
    def verify_aadhar_otp(cls, aadhar, otp, access_key):
        status, response = KarzaAccessor.verify_aadhar_otp(aadhar, otp, access_key)
        if util.is_status_failed(status):
            return status, None

        split_address = response.get("result", {}).get("dataFromAadhaar", {}).get("address", {}).get("splitAddress", {})
        dob_string = response.get("result", {}).get("dataFromAadhaar", {}).get("dob", '')
        name = response.get("result", {}).get("dataFromAadhaar", {}).get("name", '')
        share_code = response.get("result", {}).get("shareCode", '')
        aadhar_zip = response.get("result", {}).get("dataFromAadhaar", {}).get("file", {}).get("xmlContent", "")
        aadhar_pdf_report = response.get("result", {}).get("dataFromAadhaar", {}).get("file", {}).get("pdfContent", '')

        address = {
            "street": split_address['street'],
            "houseNumber": split_address['houseNumber'],
            "landmark": split_address['landmark'],
            "state": split_address['state'],
            "pincode": split_address['pincode'],
            "city": split_address['district'],
            "vtcName": split_address['vtcName'],
            "location": split_address['location']
        }

        result = {
            'address': address,
            'dob': dob_string,
            'name': name,
            'share_code': share_code,
            'aadhar_zip': aadhar_zip,
            'aadhar_pdf_report': aadhar_pdf_report
        }

        return api.SUCCESS, result
