import requests
import json
from requests.auth import HTTPBasicAuth
from datetime import datetime
import base64
import time


class MpesaC2bCredential:
    try:
        consumer_key = 'hU8ip3U4IhPEWSn3tLnA3zdryNxQjNNh'
        consumer_secret = 'PkDB7LoL3jDI3BXa'
        api_URL = 'https://api.safaricom.co.ke/oauth/v1/generate?grant_type=client_credentials'
    except:
        pass


class Mpesab2cCredential:
    try:
        consumer_key = 'Y5QBjdBlEiPoGkGUF4gbLqAYi4nBFnOF'
        consumer_secret = 'jUhwUGgk1mkyXGhf'
        api_URL = 'https://api.safaricom.co.ke/oauth/v1/generate?grant_type=client_credentials'
    except:
        pass



class MpesaB2cCredential:
    try:
        consumer_key = 'hU8ip3U4IhPEWSn3tLnA3zdryNxQjNNh'
        consumer_secret = 'PkDB7LoL3jDI3BXa'
        #api_URL = 'https://sandbox.safaricom.co.ke/oauth/v1/generate?grant_type=client_credentials'
    except:
        pass


class MpesaAccessToken:
    try:
        r = requests.get(MpesaC2bCredential.api_URL,
                     auth=HTTPBasicAuth(MpesaC2bCredential.consumer_key, MpesaC2bCredential.consumer_secret))
        mpesa_access_token = json.loads(r.text)
        validated_mpesa_access_token = mpesa_access_token['access_token']
    except:
        pass


class MpesaAccessToke:
    try:
        r = requests.get(Mpesab2cCredential.api_URL,
                     auth=HTTPBasicAuth(Mpesab2cCredential.consumer_key, Mpesab2cCredential.consumer_secret))
        mpesa_access_token = json.loads(r.text)
        validated_mpesa_access_token = mpesa_access_token['access_token']
    except:
        pass


class LipanaMpesaPpassword:
    try:
        lipa_time = datetime.now().strftime('%Y%m%d%H%M%S')
        Business_short_code = "4060287"
        Test_c2b_shortcode = "4060287"
        passkey = '6eeafb78ca0185ce797a7808f067c9f186c96af6360181218e912ac77577361f'

        data_to_encode = Business_short_code + passkey + lipa_time

        online_password = base64.b64encode(data_to_encode.encode())
        decode_password = online_password.decode('utf-8')
    except:
        pass


class B2C:
    try:
        Test_B2b_shortcode = "4060287"
        passkey = '6eeafb78ca0185ce797a7808f067c9f186c96af6360181218e912ac77577361f'

        data_to_encode = Test_B2b_shortcode + passkey

        security = base64.b64encode(data_to_encode.encode())
        security_cred = security.decode('utf-8')
    except:
        pass