from appservices.common.util import *

reminder_settings = Blueprint("reminder_settings",__name__)

@reminder_settings.route("/create_reminder_settings",methods=["POST"])
@user_required
def create_reminder_settings():
    data_status = {"responseStatus":0,"result":""}
    userId = request.json.get("userId","")
    enableReminder = request.json.get("enableReminder")
    smsReminder = request.json.get("smsReminder")
    emailReminder = request.json.get("emailReminder")
    linkExpiry = request.json.get("linkExpiry")

    try:
        if userId and enableReminder and (smsReminder or emailReminder) and linkExpiry:
            reminder_settings_queryset = ReminderSettings.objects(userId=userId,status__in=[0,1]).first()
            if reminder_settings_queryset:
                if reminder_settings_queryset.enableReminder == True:
                    reminder_settings_queryset.update(
                        enableReminder=enableReminder,
                        smsReminder=smsReminder,
                        emailReminder=emailReminder,
                        linkExpiry=linkExpiry
                        )
                else:
                    reminder_settings_queryset.update(enableReminder=enableReminder)
                data_status["result"]="Reminder settings updated successfully!"
            else:
                reminder_settings_table = ReminderSettings(
                    userId=userId,
                    enableReminder=enableReminder,
                    smsReminder=smsReminder,
                    emailReminder=emailReminder,
                    linkExpiry=linkExpiry,
                    createdOn=datetime.datetime.now(),
                    status=1
                    )
                save_table=reminder_settings_table.save()
                reminderId = str(save_table.id)
                data_status["result"]="Reminder settings added successfully!"

            data_status["responseStatus"]=1
            return data_status
        else:
            data_status["result"]="Required fields are missing!!"
            return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        data_status["result"]="Unable to create reminder settings!!"
        return data_status

def fetching_reminder_settings_details(reminder_settings_queryset):
    reminderDict = {}
    try:
        reminderDict = {
        "id":str(reminder_settings_queryset.id),
        "userId":str(reminder_settings_queryset.userId.id),
        "userName":reminder_settings_queryset.userId.fullName,
        "createdOn":reminder_settings_queryset.createdOn.astimezone(ist_timezone).strftime("%d-%m-%Y %I:%M %p"),
        "status":reminder_settings_queryset.status,
        "enableReminder":reminder_settings_queryset.enableReminder,
        "smsReminder":reminder_settings_queryset.smsReminder,
        "emailReminder":reminder_settings_queryset.emailReminder,
        "linkExpiry":reminder_settings_queryset.linkExpiry
        }
    except Exception as e:
        app.logger.error(traceback.format_exc())
    return reminderDict

@reminder_settings.route("/view_reminder_settings",methods=["POST"])
@user_required
def view_reminder_settings():
    data_status = {"responseStatus":0,"result":""}
    userId = request.json.get("userId","")

    try:
        reminder_settings_queryset = ReminderSettings.objects(userId=userId,status__in=[0,1]).first()

        data_status["responseStatus"]=1
        data_status["result"]="Reminder settings fetched data successfully!"
        data_status["reminderDetails"]=fetching_reminder_settings_details(reminder_settings_queryset)
        return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        data_status["result"]="Unable to fetch reminder settings data!!"
        return data_status


# @reminder_settings.route("/csv_file_data_upload", methods=["GET"])
# def csv_file_data_upload():
#     print("HIIIIIIIIIIIIII")
#     upload_csv_file = request.json.get("upload_csv_file","S")
#     if not upload_csv_file:
#         return jsonify({'error': 'No file data provided'}), 400

#     try:
#         # Decode the base64 string
#         file_content = base64.b64decode(upload_csv_file).decode('utf-8')
        
#         # Use StringIO to read the string as a file object
#         csvfile = StringIO(file_content)
#         csvreader = csv.DictReader(csvfile)
        
#         userId = "667d13c17ebce740151a9437"

#         # Iterate through the CSV rows and create records
#         for row in csvreader:
#             adjustDate = row['adjustDate']
#             adjustType = row['adjustType']
#             remitter = row['remitter']
#             beneficiaryName = row['beneficiaryName']
#             reasonCode = row['reasonCode']
#             remarks = row['remarks']
#             rrn = row['rrn']
#             txnAmount = row['txnAmount']
#             adjAmount = row['adjAmount']
#             txnDate = row['txnDate']

#             # Assuming ChargeBacks is your model and it has a save method
#             create_chargeback_table = ChargeBacks(
#                 userId=userId,
#                 adjustDate=adjustDate,
#                 adjustType=adjustType,
#                 remitter=remitter,
#                 beneficiaryName=beneficiaryName,
#                 reasonCode=reasonCode,
#                 remarks=remarks,
#                 rrn=rrn,
#                 txnAmount=txnAmount,
#                 adjAmount=adjAmount,
#                 txnDate=txnDate,
#                 createdOn=datetime.datetime.now(),
#                 status=1
#             ).save()

#         return jsonify({'success': 'Data uploaded and records created successfully'}), 201

#     except Exception as e:
#         app.logger.error(traceback.format_exc())
#         return jsonify({'error': str(e)}), 500



# @frontend_reports.route("/merchant_agreement_pdf_document",methods=["POST"])
# # @user_required
# def merchant_agreement_pdf_document():
#     data_status = {"responseStatus": 0, "result": ""}
#     userId = request.json.get("userId","")
#     try:
#         merchant_queryset = Users.objects(id=userId,status=1).first()

#         merchantName = merchant_queryset.fullName
#         signatureImage = merchant_queryset.signatureImage

#         document_queryset = Documents.objects(status=1).order_by("-id").first()

#         documentContent = document_queryset.documentContent

#         # Here the convert documentContent to pdf along with documentContent in the replace of $$NAME$$ and $$SIGNATURE$$

#         data_status["responseStatus"] = 1
#         data_status["result"] = "Merchant agreement successful!"
#         return data_status
#     except Exception as e:
#         app.logger.error(traceback.format_exc())
#         data_status["result"] = "Unable to agreement for merchant!!"
#         return data_status


# from reportlab.lib.pagesizes import letter
# from reportlab.pdfgen import canvas
# from reportlab.lib.utils import ImageReader

# @frontend_reports.route("/merchant_agreement_pdf_document", methods=["POST"])
# def merchant_agreement_pdf_document():
#     data_status = {"responseStatus": 0, "result": ""}
#     userId = request.json.get("userId", "")
#     try:
#         merchant_queryset = Users.objects(id=userId, status=1).first()

#         merchantName = merchant_queryset.fullName
#         signatureImage = domain+merchant_queryset.signatureImage

#         document_queryset = Documents.objects(status=1).order_by("-id").first()
#         documentContent = document_queryset.documentContent

#         # Replace placeholders with actual content
#         documentContent = documentContent.replace("$$NAME$$", merchantName)

#         # Create a PDF
#         buffer = BytesIO()
#         c = canvas.Canvas(buffer, pagesize=letter)
#         width, height = letter

#         # Add document content
#         text = c.beginText(40, height - 40)
#         text.setFont("Helvetica", 12)
#         for line in documentContent.splitlines():
#             text.textLine(line)
#         c.drawText(text)

#         # Add signature image if it exists
#         if signatureImage:
#             with open(signatureImage, "rb") as image_file:
#                 image = Image.open(image_file)
#                 image_reader = ImageReader(image)
#                 c.drawImage(image_reader, 40, 100, width=200, preserveAspectRatio=True)

#         c.showPage()
#         c.save()

#         buffer.seek(0)
#         pdf_filename = f"{userId}_agreement.pdf"

#         return send_file(buffer, as_attachment=True, download_name=pdf_filename, mimetype='application/pdf')
#     except Exception as e:
#         app.logger.error(traceback.format_exc())
#         data_status["result"] = "Unable to generate agreement for merchant!!"
#         return data_status


# import pdfkit

# # Set configuration to use custom wkhtmltopdf path
# config = pdfkit.configuration(wkhtmltopdf='/path/to/wkhtmltopdf.sh')

# @frontend_reports.route("/merchant_agreement_pdf_document", methods=["POST"])
# def merchant_agreement_pdf_document():
#     data_status = {"responseStatus": 0, "result": ""}
#     userId = request.json.get("userId", "")
#     try:
#         merchant_queryset = Users.objects(id=userId, status=1).first()

#         merchantName = merchant_queryset.fullName
#         signatureImage = domain + merchant_queryset.signatureImage

#         document_queryset = Documents.objects(status=1).order_by("-id").first()
#         documentContent = document_queryset.documentContent

#         # Replace placeholders with actual content
#         documentContent = documentContent.replace("$$NAME$$", merchantName)
#         documentContent = documentContent.replace("$$SIGNATURE$$", f'<img src="{signatureImage}" width="200"/>')

#         # Generate the PDF from HTML
#         options = {
#             'page-size': 'Letter',
#             'encoding': 'UTF-8',
#         }

#         pdf = pdfkit.from_string(documentContent, False, configuration=config, options=options)

#         pdf_filename = f"{userId}_agreement.pdf"
#         return send_file(BytesIO(pdf), as_attachment=True, download_name=pdf_filename, mimetype='application/pdf')
#     except Exception as e:
#         app.logger.error(traceback.format_exc())
#         data_status["result"] = "Unable to generate agreement for merchant!!"
#         return data_status


