from appservices.common.util import *

def signzy_aadhaar_kyc(get_base_url, authorization, aadhaar_number):
    # Standardized response dictionary
    signzyAadhaarDict = {"responseStatus": 0, "result": ""}
     
    try:
        signzy_request_body = {
            "uid": aadhaar_number
        }

        signzy_header={
            "Content-Type": "application/json",
            "Authorization" : authorization
        }

        url = get_base_url + "/aadhaar/verify"

        print(signzy_request_body, "((((((((signzy REQUEST BODY )))))))")

        response = requests.post(url, json=signzy_request_body, headers=signzy_header)

        response_status = response.status_code
        signzy_response_json = response.json()

        print(signzy_response_json, response_status, "((((((((signzy aadhar RESPONSE BODY))))))))")
        responseStatus=0
        result={}
        responseData={}
        verified=False
        verifiedStatus=0
        mobileNumber=""
        if response_status == 200:
            responseStatus = 1 
            result = "Success"
            responseData = signzy_response_json.get("result",{})
            verified=responseData.get("verified")
            mobileNumber=responseData.get("mobileNumber")
            if verified:
                verifiedStatus=1
        elif response_status == 401:
            responseStatus = 0
            result = "An Error occured. Please try again later."
        elif response_status == 400:
            responseStatus = 0
            result = signzy_response_json.get("error",{}).get("message")
        else:
            responseStatus = 0
            result = "An Error occured. Please try again later."

        signzyAadhaarDict={
            "responseStatus":responseStatus,
            "result": result,
            "responseData": signzy_response_json,
            "verifiedStatus": verifiedStatus,
            "mobileNumber": mobileNumber,
            "accessKey": ""
        }

        return signzyAadhaarDict
    except Exception as e:
        app.logger.error("Error during request preparation: " + traceback.format_exc())
        signzyAadhaarDict["result"] = "An Error occured. Please try again later."
    
    return signzyAadhaarDict

def signzy_individual_pan_kyc(get_base_url, authorization, pan_number):
    # Standardized response dictionary
    signzyIndividualPanDict = {"responseStatus": 0, "result": "","apiResponse":{}}
    
    try:
        signzy_request_body = {
            "number": pan_number,
            "returnIndividualTaxComplianceInfo": "true",
            "consent": "Y"
        }

        signzy_header={
            "Content-Type": "application/json",
            "Authorization" : authorization
        }

        url = get_base_url + "/pan/fetchV2"

        print(signzy_request_body, "((((((((signzy REQUEST BODY )))))))")

        response = requests.post(url, json=signzy_request_body, headers=signzy_header)

        response_status = response.status_code
        signzy_response_json = response.json()

        print(signzy_response_json, response_status, "((((((((signzy RESPONSE BODY))))))))")
        responseStatus=0
        name=""
        panStatus=""
        isIndividual=""

        if response_status == 200:
            responseStatus = 1 
            result = "Success"
            name = signzy_response_json.get("result",{}).get("name")
            panStatus=signzy_response_json.get("result",{}).get("panStatus")
            isIndividual=signzy_response_json.get("result",{}).get("isIndividual")
        elif response_status == 401:
            responseStatus = 0
            result = "Failed"
        elif response_status == 400:
            responseStatus = 0
            result = "Failed"
        else:
            responseStatus = 0
            result = "Failed"

        signzyIndividualPanDict={
            "responseStatus":responseStatus,
            "result": result,
            "name":name,
            "address":"",
            "panStatus":panStatus,
            "isIndividual":isIndividual,
            "apiResponse":signzy_response_json,
        }

        return signzyIndividualPanDict
    except Exception as e:
        app.logger.error("Error during request preparation: " + traceback.format_exc())
        signzyIndividualPanDict["result"] = "An Error occured. Please try again later.."
    
    return signzyIndividualPanDict


def signzy_business_pan_kyc(get_base_url, authorization, pan_number):
    # Standardized response dictionary
    signzyIndividualPanDict = {"responseStatus": 0, "result": ""}
    
    try:
        signzy_request_body = {
            "name": name,
            "number": pan_number,
            "fuzzy": "true",
            "panStatus": "true"
            }

        signzy_header={
            "Content-Type": "application/json",
            "Authorization" : authorization
        }

        url = get_base_url + "/pan/fetchV2"

        print(signzy_request_body, "((((((((signzy REQUEST BODY )))))))")

        response = requests.post(url, json=signzy_request_body, headers=signzy_header)

        response_status = response.status_code
        signzy_response_json = response.json()

        print(signzy_response_json, response_status, "((((((((signzy RESPONSE BODY))))))))")
        responseStatus=0

        if response_status == 200:
            responseStatus = 1 
            result = signzy_response_json.get("result",{})
        elif response_status == 401:
            responseStatus = 0
            result = "An Error occured. Please try again later."
        elif response_status == 400:
            responseStatus = 0
            result = signzy_response_json.get("error",{}).get("message")
        else:
            responseStatus = 0
            result = "An Error occured. Please try again later."

        signzyIndividualPanDict={
            "responseStatus":responseStatus,
            "result": result
        }

        return signzyIndividualPanDict
    except Exception as e:
        app.logger.error("Error during request preparation: " + traceback.format_exc())
        signzyIndividualPanDict["result"] = "An Error occured. Please try again later.."
    
    return signzyIndividualPanDict



def signzy_bank_verification_kyc(get_base_url, authorization, beneficiaryAccount,beneficiaryIFSC,beneficiaryMobile="",beneficiaryName=""):
    # Standardized response dictionary
    signzyIndividualPanDict = {"responseStatus": 0, "result": ""}
    
    try:
        signzy_request_body = {
            "beneficiaryAccount": beneficiaryAccount,
            "beneficiaryIFSC": beneficiaryIFSC,
            "beneficiaryMobile": beneficiaryMobile,
            "beneficiaryName": beneficiaryName,
            "nameMatchScore": "0.7",
            "nameFuzzy": "true"
        }

        signzy_header={
            "Content-Type": "application/json",
            "Authorization" : authorization
        }

        url = get_base_url + "/bankaccountverification/bankaccountverifications"

        print(signzy_request_body, "((((((((signzy REQUEST BODY )))))))")

        response = requests.post(url, json=signzy_request_body, headers=signzy_header)

        response_status = response.status_code
        signzy_response_json = response.json()

        print(signzy_response_json, response_status, "((((((((signzy RESPONSE BODY))))))))",)
        responseStatus=0
        beneficiaryName=""
        nameMatch=""
        if response_status == 200:
            if signzy_response_json.get("result",{}).get("active") == "yes":
                responseStatus = 1 
                resultresponse = signzy_response_json.get("result",{})
                result = "SUCCESS"
                bankTransfer = resultresponse.get("bankTransfer",{})
                beneficiaryName=bankTransfer.get('beneName')
                nameMatch=resultresponse.get('nameMatch')

            else:
                responseStatus = 0 
                result = signzy_response_json.get("result",{}).get("reason")
        elif response_status == 401:
            responseStatus = 0
            result = "An Error occured. Please try again later."
        elif response_status == 400:
            responseStatus = 0
            result = signzy_response_json.get("error",{}).get("message")
        else:
            responseStatus = 0
            result = "An Error occured. Please try again later."

        signzyIndividualPanDict={
            "responseStatus":responseStatus,
            "beneficiaryName":beneficiaryName,
            "nameMatch":nameMatch,
            "responseData":[signzy_response_json],
            "result": result
        }

        return signzyIndividualPanDict
    except Exception as e:
        app.logger.error("Error during request preparation: " + traceback.format_exc())
        signzyIndividualPanDict["result"] = "An Error occured. Please try again later."
    
    return signzyIndividualPanDict


def signzy_name_match_check_kyc(get_base_url, authorization, nameOnPan, nameToCheck):
    # Standardized response dictionary
    signzyIndividualPanDict = {"responseStatus": 0, "result": ""}
    
    try:
        signzy_request_body = {
        "nameBlockv2": {
        "name1": nameOnPan,
        "name2": nameToCheck
            }
        }

        signzy_header={
            "Content-Type": "application/json",
            "Authorization" : authorization
        }

        url = get_base_url + "matchers/nameMatchV2"

        print(signzy_request_body, "((((((((signzy REQUEST BODY )))))))")

        response = requests.post(url, json=signzy_request_body, headers=signzy_header)

        response_status = response.status_code
        signzy_response_json = response.json()

        print(signzy_response_json, response_status, "((((((((signzy RESPONSE BODY))))))))")
        responseStatus=0
        result=""
        name_match_score=""

        if response_status == 200:
            responseStatus = 1 
            result = "Success"
            name_match_score = signzy_response_json.get("result",{}).get("name1_vs_name2_matchScore")
        elif response_status == 401:
            responseStatus = 0
            result = "An Error occured. Please try again later."
        elif response_status == 400:
            responseStatus = 0
            result = signzy_response_json.get("error",{}).get("message")
        else:
            responseStatus = 0
            result = "An Error occured. Please try again later."

        signzyIndividualPanDict={
            "responseStatus":responseStatus,
            "result": result,
            "name_match_score": name_match_score
        }

        return signzyIndividualPanDict
    except Exception as e:
        app.logger.error("Error during request preparation: " + traceback.format_exc())
        signzyIndividualPanDict["result"] = "An Error occured. Please try again later.."
    
    return signzyIndividualPanDict



def signzy_cin_number_check_kyc(get_base_url, authorization, cinNumber):
    # Standardized response dictionary
    signzyIndividualPanDict = {"responseStatus": 0, "result": ""}
    
    try:
        signzy_request_body = {     "cin": cinNumber }

        # https://api.signzy.app/api/v3/roc/simpleSearchByCin

        signzy_header={
            "Content-Type": "application/json",
            "Authorization" : authorization
        }

        url = get_base_url + "roc/simpleSearchByCin"

        print(signzy_request_body, "((((((((signzy REQUEST BODY )))))))")

        response = requests.post(url, json=signzy_request_body, headers=signzy_header)

        response_status = response.status_code
        signzy_response_json = response.json()

        print(signzy_response_json, response_status, "((((((((signzy RESPONSE BODY))))))))")
        responseStatus=0
        result=""
        companyName=""
        companyActualStatus=""
        companyStatus=""
        apiresponse={}
        directorsDict={}
        directorsList=[]
        if response_status == 200:
            responseStatus = 1 
            result = "Success"
            apiresponse = signzy_response_json.get("result",{})
            for each_director in apiresponse.get('directorDetails'):
                directorsDict={
                "directorName":each_director.get('name'),
                "directorPanNumber":each_director.get('pan'),
                "address":each_director.get('address'),
                "designation":each_director.get('designation'),
                "din":each_director.get('din')
                }
                directorsList.append(directorsDict)

            companyActualStatus=apiresponse.get('status')
            if companyActualStatus.lower()=="active":
                companyStatus="Active"
            else:
                companyStatus="Inactive"
            companyName=apiresponse.get('companyName')
        elif response_status == 401:
            responseStatus = 0
            result = "An Error occured. Please try again later."
        elif response_status == 400:
            responseStatus = 0
            result = signzy_response_json.get("error",{}).get("message")
        else:
            responseStatus = 0
            result = "An Error occured. Please try again later."

        signzyIndividualPanDict={
            "responseStatus":responseStatus,
            "responseData":[signzy_response_json],
            "companyActualStatus": companyActualStatus,
            "directorsList": directorsList,
            "companyStatus": companyStatus,
            "companyName": companyName,
            "result": result
        }

        return signzyIndividualPanDict
    except Exception as e:
        app.logger.error("Error during request preparation: " + traceback.format_exc())
        signzyIndividualPanDict["result"] = "An Error occured. Please try again later.."
    
    return signzyIndividualPanDict


def signzy_detailed_cin_number_check_kyc(get_base_url, authorization, cinNumber):
    # Standardized response dictionary
    signzyIndividualPanDict = {"responseStatus": 0, "result": ""}
    
    try:
        signzy_request_body = {     "cin": cinNumber,"getAddressInfo": True }

        # https://api.signzy.app/api/v3/roc/detailedSearchByCin

        signzy_header={
            "Content-Type": "application/json",
            "Authorization" : authorization
        }

        url = get_base_url + "roc/detailedSearchByCin"

        print(signzy_request_body, "((((((((signzy REQUEST BODY )))))))")

        response = requests.post(url, json=signzy_request_body, headers=signzy_header)

        response_status = response.status_code
        signzy_response_json = response.json()

        print(signzy_response_json, response_status, "((((((((signzy RESPONSE BODY))))))))")
        responseStatus=0
        result=""
        name_match_score=""
        if response_status == 200:
            responseStatus = 1 
            result = "Success"
            companyName = signzy_response_json.get("result",{}).get("companyName","")
            companyStatus = signzy_response_json.get("result",{}).get("status","")
        elif response_status == 401:
            responseStatus = 0
            result = "An Error occured. Please try again later."
        elif response_status == 400:
            responseStatus = 0
            result = signzy_response_json.get("error",{}).get("message")
        else:
            responseStatus = 0
            result = "An Error occured. Please try again later."

        signzyIndividualPanDict={
            "responseStatus":responseStatus,
            "result": result,
            "companyStatus": companyStatus,
            "companyName": companyName
        }

        return signzyIndividualPanDict
    except Exception as e:
        app.logger.error("Error during request preparation: " + traceback.format_exc())
        signzyIndividualPanDict["result"] = "An Error occured. Please try again later.."
    
    return signzyIndividualPanDict

def signzy_pan_to_gst(get_base_url, authorization, pan_number,state="",email=""):
# Standardized response dictionary
    signzyIndividualPanDict = {"responseStatus": 0, "result": ""}

    try:
        signzy_request_body = {
                "panNumber": pan_number,
                "state": state,
                "email": email
            }

        signzy_header={
            "Content-Type": "application/json",
            "Authorization" : authorization
        }

        url = get_base_url + "/gst/panToGstnDetail"

        print(signzy_request_body, "((((((((signzy REQUEST BODY )))))))")

        response = requests.post(url, json=signzy_request_body, headers=signzy_header)

        response_status = response.status_code
        signzy_response_json = response.json()

        print(signzy_response_json, response_status, "((((((((signzy RESPONSE BODY))))))))",)
        responseStatus=0
        gstNumber=""
        registrationName=""
        registrationNameDict={}
        registeredNamesList=[]

        if response_status == 200:
            responseStatus = 1 
            result = "Success"
            gstNumber = signzy_response_json.get("result",{}).get("gstin")
            gstnRecords = signzy_response_json.get("result",{}).get("gstnRecords",[])
            for eachCompany in gstnRecords:
                registrationNameDict={
                "companyName":eachCompany.get('registrationName'),
                "companyGstIn":eachCompany.get('gstin'),
                }
                registeredNamesList.append(registrationNameDict)
            # registeredNamesList = [i.get("registrationName") for i in gstnRecords]
        elif response_status == 401:
            responseStatus = 0
            result = "An Error occured. Please try again later."
        elif response_status == 404:
            responseStatus = 0
            result = signzy_response_json.get("error",{}).get("message")
        else:
            responseStatus = 0
            result = "An Error occured. Please try again later."

        signzyIndividualPanDict={
            "responseStatus":responseStatus,
            "responseData": signzy_response_json,
            "gstNumber": gstNumber,
            "registeredNamesList": registeredNamesList,
            "result": result
        }

        return signzyIndividualPanDict
    except Exception as e:
        app.logger.error("Error during request preparation: " + traceback.format_exc())
        signzyIndividualPanDict["result"] = "An Error occured. Please try again later."
        return signzyIndividualPanDict
