import pdfkit

from app.api import api
from app.credit_fair.credit_fair import CreditFair
from app.karza.karza import Karza
from app.util import util
from app.util.file_util import FileUtil


class UserDocument:
    DOCUMENT_TYPE_ZIP = 'ZIP'
    PDF = 'PDF'

    AADHAR_ZIP = 'AADHAR_ZIP'
    AADHAR_CARD = 'AADHAR_CARD'
    AGREEMENT = 'LOAN_AGREEMENT_ESIGN'
    EPF_REPORT = 'EPF_REPORT'

    def __init__(self, document):
        self.document = document

    @classmethod
    def upload_document(cls, loan_application_id, document_name, document_format, document_content, document_password,
                        bearer_token, client_id, client_secret):
        return CreditFair.upload_document(loan_application_id, document_name, document_format, document_content,
                                          document_password, bearer_token, client_id, client_secret)

    @classmethod
    def convert_agreement_to_pdf(cls, html_document):
        pdf_path = FileUtil.get_temp_file(f'agreement_{util.get_char_uuid(10)}.pdf')
        
        options = {
            'page-size': 'A4',
            'margin-top': '15mm',      
            'margin-right': '15mm',    
            'margin-bottom': '15mm',   
            'margin-left': '15mm',     
            'encoding': 'UTF-8',
            'no-outline': None
        }
        pdfkit.from_string(html_document, pdf_path, options=options)

        return pdf_path

    @classmethod
    def generate_pdf_from_html(cls, html_document, pdf_name):
        pdf_path = FileUtil.get_temp_file(f'{pdf_name}.pdf')
        pdfkit.from_string(html_document, pdf_path)
        return pdf_path

    @classmethod
    def perform_aadhar_ocr(cls, document_content):
        status, response = Karza.perform_kyc_ocr(document_content, "AADHAAR", "BACK")
        if util.is_status_failed(status):
            return status, dict()

        return api.SUCCESS, response

    @classmethod
    def perform_driving_license_ocr(cls, document_content):
        status, response = Karza.perform_kyc_ocr(document_content, "DL", "")
        if util.is_status_failed(status):
            return status, dict()

        return api.SUCCESS, response

    @classmethod
    def perform_voter_ocr(cls, document_content):
        status, response = Karza.perform_kyc_ocr(document_content, "VOTER", "BACK")
        if util.is_status_failed(status):
            return status, dict()

        return api.SUCCESS, response

    @classmethod
    def perform_passport_ocr(cls, document_content):
        status, response = Karza.perform_kyc_ocr(document_content, "PASSPORT", "BACK")
        if util.is_status_failed(status):
            return status, dict()

        return api.SUCCESS, response
