#!/usr/bin/python3
#encoding:utf-8


from sitepackage.pay_ccavenue import ccavenue_check_payment
from sitepackage.pay_telr2 import telr_check_payment
from sitepackage.pay_paytabs import paytabs_check_payment
from sitepackage.thissql import sqlw, sqlr
from sitepackage.mail import sendmail

import datetime
import json
import os

__config__ = {
  "files_path":"files",
  'settings':'settings.json',
  "files_path":"files",
  'log_dir_path':'log'
}


def read_settings():
  with open(__config__['settings'], "r", encoding="utf-8") as read_file:
    data = json.load(read_file)
  return data


def send_emails(mail_success, mail_success2, request, uid, settings):
  email = ""
  if "line4" in request:
    email = request["line4"]
  files_list = []
  for key, values in request["files"].items():
    for file_id in values:
      file_name = sqlr("SELECT file_name FROM files WHERE file_id=?", [file_id])
      if len(file_name) == 1:
        file_name = file_name[0][0]
        file_obj = open(os.path.join(__config__["files_path"], file_id), "rb").read()
        files_list.append((file_name, file_obj))
  if mail_success == 0:
    traceback_response, sendmail_error = sendmail(
          settings["mail"]["mail_to"],
          settings["mail"]["mail_login"],
          settings["mail"]["mail_sbj"],
          json.dumps(request)+"<br>uid="+uid,
          "html",
          settings["mail"]["smtp_server_port"],
          settings["mail"]["mail_login"],
          settings["mail"]["mail_pass"],
          files_list)
    if sendmail_error == "":
      sqlw("UPDATE pay_result SET mail_success=? WHERE uid=?",
            ["1", uid])
  if mail_success2 == 0:
    traceback_response, sendmail_error = sendmail(
          email,
          settings["mail2"]["mail_login"],
          settings["mail2"]["mail_sbj"],
          settings["mail2"]["mail_body"],
          "html",
          settings["mail2"]["smtp_server_port"],
          settings["mail2"]["mail_login"],
          settings["mail2"]["mail_pass"])
    if sendmail_error == "":
      sqlw("UPDATE pay_result SET mail_success2=? WHERE uid=?",
            ["1", uid])



def main():
  settings = read_settings()


  for uid, pay_sys, pay_sys_ref, request, payment, payment_success, mail_success, mail_success2, date in sqlr(
      "SELECT uid, pay_sys, pay_sys_ref, request, payment, payment_success, mail_success, mail_success2, date FROM pay_result", []):
    request = json.loads(request)
    if payment_success == 0 and pay_sys_ref is not None and pay_sys_ref != "" and 'None':
      #print([uid,pay_sys_ref,payment_success,mail_success,mail_success2])
      if pay_sys in ["1","2","6","7"]:
        command, default_data = None, None
        for item in settings["pay_sys"]:
          if item["id"] == pay_sys:
            #print("item", item)
            default_data = item["default_data"]
            check, result = globals()[item["command_check"]](uid, pay_sys_ref, default_data)
            if result == "disable":
              sqlw("UPDATE pay_result SET payment_success=? WHERE uid=?",
                ["-1", uid])
            if check:
              #print("command", item["command_check"],pay_sys,  uid, pay_sys_ref, default_data)
              #print("uid", uid, "is ok")
              sqlw("UPDATE pay_result SET payment_success=? WHERE uid=?",
                ["1", uid])
              send_emails(mail_success, mail_success2, request, uid, settings)

if __name__ == "__main__":
  main()
