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


import os
import datetime
import json
import traceback
import requests


__config__ = {
  'log_dir_path':'log'
}


def log(text, data):
  index = 1
  name = os.path.join(
    __config__['log_dir_path'],
    'payment_log_' + datetime.datetime.now().strftime('%Y%m%d%H%M%S%f') + '_1')
  while os.path.exists(name+ '.txt'):
    index += 1
    name = '_'.join(name.split('_')[:-1])+ '_'+str(index)
  savefile = open(name + '.txt', 'w', encoding="utf-8")
  try:
    savefile.write(str(text))
    savefile.write('\n')
  except:
    pass
  try:
    savefile.write(str(data))
  except:
    pass
  savefile.close()


def get_payment_link(payment_data):
  ok, payment_link, ref = False, None, None
  try:
    amount = str("{:.2f}".format(float(payment_data["amountcent_int"])/100))
    headers = {
      "authorization":payment_data["server_key"],
      "content-type":"application/json"
    }
    data = {
      "profile_id": payment_data["profile_id"],
      "tran_type": "sale",
      "tran_class": "ecom" ,
      "cart_id":payment_data["uid"],
      "cart_description": payment_data["description"],
      "cart_currency": payment_data["currency_str"],
      "cart_amount": amount,
      "callback": payment_data["url_success"],
      "return": payment_data["url_cancel"]
    }
    r = requests.post(
      payment_data["url"],
      json = data,
      headers = headers)
    response = r.json()
    payment_link = response["redirect_url"]
    ref = response["tran_ref"]
    ok = True
  except:
    log("error1", str(traceback.format_exc())) # ошибка получения данных
  return ok, payment_link, ref


def check_payment(ref):
  ok, payment_status = False, None
  try:
    headers = {
      "authorization":payment_data["server_key"],
      "content-type":"application/json"
    }
    data = {
    "profile_id": payment_data["profile_id"],
    "tran_ref": ref
    }
    r = requests.post(
      payment_data["url_check"],
      json = data,
      headers = headers)
    response = r.json()
    ok = True
  except:
    log("error2", str(traceback.format_exc())) # ошибка получения данных
  return ok, response


def paytabs_create_payment_url(payment_data):
  ok, payment_link, ref = get_payment_link(payment_data)
  if not ok:
    raise Exception('Error: can not get_payment_link')
  return payment_link, ref


def paytabs_check_payment(uid_str, ref, payment_data):
  check = False
  try:
    ok, response = check_payment(ref)
    payment_status = response["payment_result"]["response_status"]
    if payment_status == "A":
      check = True
  except:
    log("error3", str(traceback.format_exc())) # ошибка получения данных
  return check, None

"""
curl --request POST \
  --url https://secure.paytabs.com/payment/request \
  --header 'authorization: SGJ9NH626K-JH9ZRBDMLW-JWMMW2BDBZ' \
  --header 'content-type: application/json' \
  --data '{
    "profile_id": 138041,
    "tran_type": "sale",
    "tran_class": "ecom" ,
    "cart_id":"0001",
    "cart_description": "test Order 1",
    "cart_currency": "AED",
    "cart_amount": 1.01,
    "callback": "https://payment.gkd-global.com/success.html",
    "return": "https://payment.gkd-global.com/cancel.html"
  }'

redirect_url
curl --request POST \
  --url https://secure.paytabs.com/payment/query \
  --header 'authorization: PROFILE-SERVER-KEY' \
  --header 'content-type: application/json' \
  --data '{
    "profile_id": 123456,
    "tran_ref": "TST2008500000227",
  }'
"""
