package com.yourpackage;

import android.content.Context;
import android.media.MediaPlayer;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.ByteArrayOutputStream;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class SecureLoader {
    private static final String KEY = "c2937ffa8de16c05db2dbac8814f7a4209bddfe8d7620fd24c5056a3d37295dd";
    private static final String IV = "94d8b67081ee66e0036654d9fe610134";
    
    public static byte[] decryptData(byte[] encrypted) {
        try {
            byte[] keyBytes = hexStringToByteArray(KEY);
            byte[] ivBytes = hexStringToByteArray(IV);
            
            SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
            IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);
            
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
            
            return cipher.doFinal(encrypted);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    
    public static MediaPlayer loadSecureAudio(Context context, String assetPath) {
        try {
            String encPath = "encrypted/" + assetPath + ".enc";
            InputStream is = context.getAssets().open(encPath);
            
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int len;
            while ((len = is.read(buffer)) != -1) {
                baos.write(buffer, 0, len);
            }
            is.close();
            
            byte[] encryptedData = baos.toByteArray();
            byte[] decryptedData = decryptData(encryptedData);
            
            if (decryptedData == null) return null;
            
            File tempFile = File.createTempFile("audio", ".mp3", context.getCacheDir());
            tempFile.deleteOnExit();
            
            FileOutputStream fos = new FileOutputStream(tempFile);
            fos.write(decryptedData);
            fos.close();
            
            MediaPlayer mp = new MediaPlayer();
            mp.setDataSource(tempFile.getAbsolutePath());
            mp.prepare();
            return mp;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    
    public static String loadSecureString(Context context, String assetPath) {
        try {
            String encPath = "encrypted/" + assetPath + ".enc";
            InputStream is = context.getAssets().open(encPath);
            
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int len;
            while ((len = is.read(buffer)) != -1) {
                baos.write(buffer, 0, len);
            }
            is.close();
            
            byte[] encryptedData = baos.toByteArray();
            byte[] decryptedData = decryptData(encryptedData);
            
            if (decryptedData == null) return null;
            return new String(decryptedData, "UTF-8");
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    
    private static byte[] hexStringToByteArray(String s) {
        int len = s.length();
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                                 + Character.digit(s.charAt(i+1), 16));
        }
        return data;
    }
}