package com.dittomart.meatsbhavan.ui;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.webkit.WebView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.dittomart.meatsbhavan.R;
import com.dittomart.meatsbhavan.util.HashGenerationUtils;
import com.payu.base.models.ErrorResponse;
import com.payu.base.models.PayUPaymentParams;
import com.payu.checkoutpro.PayUCheckoutPro;
import com.payu.checkoutpro.models.PayUCheckoutProConfig;
import com.payu.checkoutpro.utils.PayUCheckoutProConstants;
import com.payu.ui.model.listeners.PayUCheckoutProListener;
import com.payu.ui.model.listeners.PayUHashGenerationListener;

import java.util.ArrayList;
import java.util.HashMap;

public class PayUActivity extends AppCompatActivity {

    String payuSecret = "b4d6633a8a7752fb1c4aa89a14c306fe74ef5edb3bc8559ce961f4abe9716347";
    String payuSalt = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDUkyWs/76JYy08Uo7uWt24JM3n3sVTQBY6aTky/xQ/PB+EbVR3AZxs1p3BT18F0zn2op0KCJCAy7hbgJqqLP3CKrTJ1fep51KcFwkysXhvNt17pjy761iJrnRyGLJ7ADKbsB+wUBKWnAP2uMhw4qPAueHp9BjjutZxgNMp6GI37E4k//J/Cc9/6//m7/oYW8lK/WxWVMFWvc8o+uMoV0V80QQZaUV27X3Xo80FKtPnkqeHF2kbBFQFH6kA8sE2czJetnWpptj3pP7yBZeopwrTH9jxTXz+7YkxxpwfY0WfT+4maK3ePjaQOtEFswWl1FPCV6ViixcTyY5lx2mBOpctAgMBAAECggEABEc93+B5zjwPwgILXGK5yaX7+umx4P4ONHi/rPYTSz6Dh9/Hbmm64znijOxzBiP9K6iULoqDlgQDntvUwQ4MwWaootNKm8HLGNch2UJXIS3igUWUPVf8PTEkqNM0bGNRoW6HBL5n0V4sej+30QXOs+dJ07KU+ahd/oTQOyyxJVzzxbJtdemE2Rq9I0golrMFn+dTkkjxEqKlO0vAlc7Ue7gBqf84PJYkfrAIXqkNORyPbIllT4vk1pv1GEtXKwzEa20eaQJv75zoxpPCbxQJY9wMDaaXaS/RTUy1E8jXPW+OXM5JLAP+9FJyyQYZO+eUu9rx7NlBnaEmPD4boimtYQKBgQDrhRqV3j+tALSQmGEQIVnqk4kZ76fYpmyc+514Dk53bR4erLEKG4qDuen6HUQXaFc2EKlJF+7OeRdhTNWLribYdCRYpdKPtIrccq6kWvs98Klh99rtzKkr5q8jMTt+cBXhLh+VfA8RKHIXfGIWtBEsiEFXEzs4eUQTJzrKgtVRKQKBgQDnD0NE4jNgSh32YxLq9oAoSjF2xUo+XOopdGdXAIdK8kv0wcCIQLkitpBHOSRIyjENfUIY15GpjKd9B0rseus3hoMBn7XTP3HJUTy/ICndmKAEIkZLsoOKr9IcQW8ydenun0SitWoneohEaR7PHRRZ/i1ALnnlazW89quy7p1CZQKBgDSqZAKFW1nVYYs/99yCiLfS3AKnu7HPrVQBU/onwNYl2WlkloY7GGNSbIbYioRteasGWMSWjHkxTNAePVZp0BfxCLumAQrPhYm8P19TVQFJ0qaspREuBdpiUGGfPb2NVOcwyDFGN5xPnguwbcLD61847NuK2mBLhbR+vj/Qt+DZAoGAFDZklxEGl4TETDpsfDtmCKA85Xvqu7vbDBdPtu+n5il99YJBemnXCC9aPbDE+M0fL2PmtU+eQWu5dxl9N2SlUO0mZqz29ezV4luF6d5Ba04fqVzqM1MBaM9qnOgodwyTkzlBgs5F5AA3DWz4sfuEPT8b7EJkjWosgEQ/zt5KyXUCgYEAqeZmGE1rL95rcbtg6ekryZXK/R2IgLM9+oE/olS98CYG4ORT4s6sj0D1fkGDt+jbHotwGBELTNzuEOCfRRVUylzoflbJinOAsdebqIRs7OufrHTRuG2S6grt0P0IA2ko6lSpFFigLGKRLCyyxZPce1SgNkKIaeNwYrTPQVRm0sI=";
    String payuMerchant = "6fIQWM";
    private String txnId;
    private String amount;
    private String name;
    private String email;
    private String phone;
    Context context = this;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pay_uactivity);
        Intent intent = getIntent();
        txnId = intent.getStringExtra("txnId");
        amount = intent.getStringExtra("amount");
        name = intent.getStringExtra("name");
        email = intent.getStringExtra("email");
        phone = intent.getStringExtra("phone");
        
        // Validate required parameters
        if (txnId == null || txnId.isEmpty() || 
            amount == null || amount.isEmpty() || 
            name == null || name.isEmpty() || 
            email == null || email.isEmpty() || 
            phone == null || phone.isEmpty()) {
            Log.e("PayUActivity", "Missing required parameters");
            Toast.makeText(this, "Payment parameters are missing", Toast.LENGTH_SHORT).show();
            finish();
            return;
        }
        
        startPayu(txnId, amount, name, email, phone);
    }

    public void startPayu(String txnId, String amount, String name, String email, String phone) {

        HashMap<String, Object> additionalParams = new HashMap<>();
        additionalParams.put(PayUCheckoutProConstants.CP_UDF1, "udf1");
        additionalParams.put(PayUCheckoutProConstants.CP_UDF2, "udf2");
        additionalParams.put(PayUCheckoutProConstants.CP_UDF3, "udf3");
        additionalParams.put(PayUCheckoutProConstants.CP_UDF4, "udf4");
        additionalParams.put(PayUCheckoutProConstants.CP_UDF5, "udf5");
        ArrayList<HashMap<String, String>> enforceList = new ArrayList<>();

        PayUCheckoutProConfig c = new PayUCheckoutProConfig();
        c.setMerchantName("Suguna Chicken");
        PayUPaymentParams payUPaymentParams = new PayUPaymentParams.Builder().setAmount(amount).setAdditionalParams(additionalParams).setIsProduction(true).setKey(payuMerchant).setProductInfo("Food").setPhone(phone).setUserToken("user_112").setTransactionId(txnId).setFirstName(name).setEmail(email).setSurl("https://success.com/").setFurl("https://www.failed.com/").setUserCredential("user-69696969").build();
        PayUCheckoutPro.open(this, payUPaymentParams, c, new PayUCheckoutProListener() {

            @Override
            public void onPaymentSuccess(Object response) {
                try {
                    HashMap<?, ?> resMap = (HashMap<?, ?>) response;
                    Object payUResponse = resMap.get(PayUCheckoutProConstants.CP_PAYU_RESPONSE);
                    Object merchantResponse = resMap.get(PayUCheckoutProConstants.CP_MERCHANT_RESPONSE);
                    Log.d("PayU Success", "PayU Response: " + (payUResponse != null ? payUResponse.toString() : "null"));
                    Log.d("PayU Success", "Merchant Response: " + (merchantResponse != null ? merchantResponse.toString() : "null"));
                    Toast.makeText(context, "Payment Successful!", Toast.LENGTH_SHORT).show();
                    Intent i = new Intent();
                    i.putExtra("success", true);
                    i.putExtra("txn", txnId);
                    setResult(69, i);
                    finish();
                } catch (Exception e) {
                    Log.e("PayU Success", "Error processing success response", e);
                    Toast.makeText(context, "Payment Successful!", Toast.LENGTH_SHORT).show();
                    Intent i = new Intent();
                    i.putExtra("success", true);
                    i.putExtra("txn", txnId);
                    setResult(69, i);
                    finish();
                }
            }

            @Override
            public void onPaymentFailure(Object response) {
                Toast.makeText(context, "Payment Failed!", Toast.LENGTH_SHORT).show();
                Intent i = new Intent();
                i.putExtra("success", false);
                setResult(69, i);
                finish();
            }

            @Override
            public void onPaymentCancel(boolean isTxnInitiated) {
                Toast.makeText(context, "Payment was Cancelled.", Toast.LENGTH_SHORT).show();
                Intent i = new Intent();
                i.putExtra("success", false);
                setResult(69, i);
                finish();
            }

            @Override
            public void onError(ErrorResponse errorResponse) {
                if (errorResponse != null) {
                    String errorMessage = errorResponse.getErrorMessage();
                    if (errorMessage != null && !errorMessage.isEmpty()) {
                        Log.e("PayU Error", errorMessage);
                        Toast.makeText(context, "Error: " + errorMessage, Toast.LENGTH_SHORT).show();
                        // Don't close activity on error, let SDK handle retries
                    } else {
                        Log.e("PayU Error", "Unknown error occurred");
                    }
                } else {
                    Log.e("PayU Error", "ErrorResponse is null");
                }
            }

            @Override
            public void setWebViewProperties(WebView webView, Object bank) {
                // Implement as needed
            }

            @Override
            public void generateHash(HashMap<String, String> map, PayUHashGenerationListener hashGenerationListener) {
                if (map.containsKey(PayUCheckoutProConstants.CP_HASH_STRING) && map.get(PayUCheckoutProConstants.CP_HASH_STRING) != null && map.containsKey(PayUCheckoutProConstants.CP_HASH_NAME) && map.get(PayUCheckoutProConstants.CP_HASH_NAME) != null) {

                    String hashData = map.get(PayUCheckoutProConstants.CP_HASH_STRING);
                    String hashName = map.get(PayUCheckoutProConstants.CP_HASH_NAME);
                    String hashType = map.get(PayUCheckoutProConstants.CP_HASH_TYPE);

                    String salt = payuSalt; // Salt for generating the hash
                    if (map.containsKey(PayUCheckoutProConstants.CP_POST_SALT) && map.get(PayUCheckoutProConstants.CP_POST_SALT) != null) {
                        salt += map.get(PayUCheckoutProConstants.CP_POST_SALT);
                    }

                    String hash = null;

                    if (hashName.equalsIgnoreCase(PayUCheckoutProConstants.CP_LOOKUP_API_HASH)) {
                        hash = HashGenerationUtils.generateHashFromSDK(hashData, salt, payuSecret);  // Generate Lookup API Hash
                    } else if (hashType != null && hashType.equals(PayUCheckoutProConstants.CP_V2_HASH)) {
                        hash = HashGenerationUtils.generateV2HashFromSDK(hashData, payuSalt);  // Generate V2 Hash
                    } else {
                        hash = HashGenerationUtils.generateHashFromSDK(hashData, salt, null);  // Generate Payment Hash
                    }

                    if (!TextUtils.isEmpty(hash)) {
                        HashMap<String, String> hashMap = new HashMap<>();
                        hashMap.put(hashName, hash);

                        // Pass the generated hash back to the listener
                        hashGenerationListener.onHashGenerated(hashMap);
                    }
                }
            }

        });
    }

}

