import json
import config
import requests
import traceback


class Pirimid:

    def __init__(self):
        self.endpoint = config.PIRIMID_URL + '/fiu/api/' + config.PIRIMID_TENANT_ID + '/bank-statement/process-work-order'
        self.headers = {
            "Accept": "*/*",
            "API_KEY": config.PIRIMID_API_KEY
        }

    def initiate_bank_statement_analysis(self, data, repository_object):
        try:
            request_data = self.get_request_data(data)
            payload_data = {}
            if request_data.get("pdfPasswords"):
                payload_data = {"pdfPasswords": request_data.get("pdfPasswords")}
            response = requests.post(self.endpoint, headers=self.headers, files=request_data.get('file'), data=payload_data)
            # response = '{"trackingId":"0196bfd6-57e0-ead8-a66f-ea15959a3438","status":"PENDING",
            # "timestamp":"2025-05-11T14:53:37.640Z","message":"Request Initiated"}'
            if response.status_code == 200:
                request_log = {'employment_type': data.get('employment_type'), 'password': bool(data.get('password'))}
                self.save_response(response.text, repository_object, data.get('id'), data.get('applicant_type'), request_log)
            return response.text
        except Exception as ex:
            traceback.print_exc()

    @classmethod
    def get_request_data(cls, data):
        files = {'file': ('bank_statement.pdf', data.get('file'), 'application/pdf')}
        request_data = {
            'file': files
        }
        if data.get('password'):
            request_data['pdfPasswords'] = data.get('password')
        if data.get('employment_type') and data.get('employment_type') != 'SALARIED':
            request_data['employment_type'] = 'SELF_EMPLOYED'
        return request_data

    @staticmethod
    def save_response(response, _repository, application_id, applicant_type, request_log=None):
        try:
            tracking_id = json.loads(response).get('trackingId')
        except Exception:
            tracking_id = None
        request_body = json.dumps(request_log) if request_log else None
        result = _repository.insert_pirimid_bank_analysis(application_id, tracking_id, request_body, response, applicant_type)
        # update consumer application files ??
        return result
