package testclient;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSocketFactory;


public class UploadToServer {

    int serverResponseCode = 0;
    String upLoadServerUri="http://164.52.210.25:3335/upload";
    String upLoadServerUri2="";
    String viewUrl="";
    
    
    String uploadFile="";
    String visitPath="";
    //Login_Screen.upload_url,Login_Screen.ext_upload_url
/**********  File Path *************/

    public int uploadFile(String sourceFileUri) {

        System.out.println("sourceFileUri="+sourceFileUri+" upLoadServerUri="+upLoadServerUri);

        Random random = new Random();
        int r=random.nextInt(1000000);
        uploadFile=r+"";


        String[] split = sourceFileUri.split("\\.");
        if(split.length == 2)
            uploadFile=r+"."+split[1];
        else
            uploadFile=r+"";



        visitPath=viewUrl.replace("upload","")+"/"+uploadFile;

        String fileName = sourceFileUri;

        HttpURLConnection conn = null;
        DataOutputStream dos = null;
        String lineEnd = "\r\n";
        String twoHyphens = "--";
        String boundary = "*****";
        int bytesRead, bytesAvailable, bufferSize;
        byte[] buffer;
        int maxBufferSize = 1 * 1024 * 1024;
        File sourceFile = new File(sourceFileUri);

        if (!sourceFile.isFile()) {

            System.out.println("Source File not exist :" + sourceFileUri );
            return 0;

        } else {
            try {

                SSLTrustManager sslTrustManager = new SSLTrustManager();
                SSLSocketFactory sslSocketFactory = sslTrustManager.GetSocketFactory();

                HttpsURLConnection.setDefaultSSLSocketFactory( sslSocketFactory  );
                HttpsURLConnection.setDefaultHostnameVerifier(new NullHostNameVerifier());
// open a URL connection to the Servlet
                FileInputStream fileInputStream = new FileInputStream(sourceFile);
                URL url = new URL(upLoadServerUri);

// Open a HTTP  connection to  the URL
                if(upLoadServerUri.contains("https://"))
                    conn = (HttpsURLConnection) url.openConnection();
                else
                    conn = (HttpURLConnection) url.openConnection();
                conn.setDoInput(true); // Allow Inputs
                conn.setDoOutput(true); // Allow Outputs
                conn.setUseCaches(false); // Don't use a Cached Copy
                conn.setRequestMethod("POST");
                conn.setRequestProperty("Connection", "Keep-Alive");
                conn.setRequestProperty("ENCTYPE", "multipart/form-data");
                conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
                //conn.setRequestProperty("uploaded_file", fileName);
                conn.setRequestProperty("file", uploadFile);

                dos = new DataOutputStream(conn.getOutputStream());

                dos.writeBytes(twoHyphens + boundary + lineEnd);
                dos.writeBytes("Content-Disposition: form-data; name=\"file\";filename=\"" + uploadFile + "\"" + lineEnd);

                dos.writeBytes(lineEnd);
                bytesAvailable = fileInputStream.available();
                bufferSize = Math.min(bytesAvailable, maxBufferSize);
                buffer = new byte[bufferSize];
                bytesRead = fileInputStream.read(buffer, 0, bufferSize);

                while (bytesRead > 0) {

                    dos.write(buffer, 0, bufferSize);
                    bytesAvailable = fileInputStream.available();
                    bufferSize = Math.min(bytesAvailable, maxBufferSize);
                    bytesRead = fileInputStream.read(buffer, 0, bufferSize);

                }
                dos.writeBytes(lineEnd);
                dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
                serverResponseCode = conn.getResponseCode();
                String serverResponseMessage = conn.getResponseMessage();

                //Log.i("uploadFile", "HTTP Response is : " + serverResponseMessage + ": " + serverResponseCode);
                System.out.println("uploadFile"+"HTTP Response is : " + serverResponseMessage + ": " + serverResponseCode);

                if (serverResponseCode == 200) {

                }
                fileInputStream.close();
                dos.flush();
                dos.close();
            } catch (MalformedURLException ex) {

                ex.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
            if(serverResponseCode != 200)
            {
                visitPath=uploadFile="NA";
            }
            return serverResponseCode;
        } // End else block
    }
    
    
    public String downloadConfig(String url_str) 
    {
                    
        String responseData = "";
        try {

            URL url = new URL(url_str);
            
            /* for Production */
// URL url = new URL("https://dashboard.paytm.com/bpay/api/v1/disburse/order/query");
            try {
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setRequestMethod("GET");
                connection.setRequestProperty("Content-Type", "application/json");
                
                connection.setDoOutput(true);
                /*
                DataOutputStream requestWriter = new DataOutputStream(connection.getOutputStream());
                requestWriter.writeBytes(post_data);
                requestWriter.close();
                */
                
                InputStream is = connection.getInputStream();
                BufferedReader responseReader = new BufferedReader(new InputStreamReader(is));
                if ((responseData = responseReader.readLine()) != null) {
                    System.out.append("Response: " + responseData);
                }
                responseReader.close();
            } catch (Exception exception) {
                exception.printStackTrace();
            }
            
        } catch (MalformedURLException ex) {
            Logger.getLogger(UploadToServer.class.getName()).log(Level.SEVERE, null, ex);
        }
        return responseData;
    }
    
    
    public int uploadFile(String sourceFileUri,String fname) {

        System.out.println("sourceFileUri="+sourceFileUri+" upLoadServerUri="+upLoadServerUri);

        Random random = new Random();
        int r=random.nextInt(1000000);
        uploadFile=r+"";


        String[] split = sourceFileUri.split("\\.");
        if(split.length == 2)
            uploadFile=r+"."+split[1];
        else
            uploadFile=r+"";

        uploadFile=fname;


        visitPath=viewUrl.replace("upload","")+"/"+uploadFile;

        String fileName = sourceFileUri;

        HttpURLConnection conn = null;
        DataOutputStream dos = null;
        String lineEnd = "\r\n";
        String twoHyphens = "--";
        String boundary = "*****";
        int bytesRead, bytesAvailable, bufferSize;
        byte[] buffer;
        int maxBufferSize = 1 * 1024 * 1024;
        File sourceFile = new File(sourceFileUri);

        if (!sourceFile.isFile()) {

            System.out.println("Source File not exist :" + sourceFileUri );
            return 0;

        } else {
            try {

                SSLTrustManager sslTrustManager = new SSLTrustManager();
                SSLSocketFactory sslSocketFactory = sslTrustManager.GetSocketFactory();

                HttpsURLConnection.setDefaultSSLSocketFactory( sslSocketFactory  );
                HttpsURLConnection.setDefaultHostnameVerifier(new NullHostNameVerifier());
// open a URL connection to the Servlet
                FileInputStream fileInputStream = new FileInputStream(sourceFile);
                URL url = new URL(upLoadServerUri);

// Open a HTTP  connection to  the URL
                if(upLoadServerUri.contains("https://"))
                    conn = (HttpsURLConnection) url.openConnection();
                else
                    conn = (HttpURLConnection) url.openConnection();
                conn.setDoInput(true); // Allow Inputs
                conn.setDoOutput(true); // Allow Outputs
                conn.setUseCaches(false); // Don't use a Cached Copy
                conn.setRequestMethod("POST");
                conn.setRequestProperty("Connection", "Keep-Alive");
                conn.setRequestProperty("ENCTYPE", "multipart/form-data");
                conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
                //conn.setRequestProperty("uploaded_file", fileName);
                conn.setRequestProperty("file", uploadFile);

                dos = new DataOutputStream(conn.getOutputStream());

                dos.writeBytes(twoHyphens + boundary + lineEnd);
                dos.writeBytes("Content-Disposition: form-data; name=\"file\";filename=\"" + uploadFile + "\"" + lineEnd);

                dos.writeBytes(lineEnd);
                bytesAvailable = fileInputStream.available();
                bufferSize = Math.min(bytesAvailable, maxBufferSize);
                buffer = new byte[bufferSize];
                bytesRead = fileInputStream.read(buffer, 0, bufferSize);

                while (bytesRead > 0) {

                    dos.write(buffer, 0, bufferSize);
                    bytesAvailable = fileInputStream.available();
                    bufferSize = Math.min(bytesAvailable, maxBufferSize);
                    bytesRead = fileInputStream.read(buffer, 0, bufferSize);

                }
                dos.writeBytes(lineEnd);
                dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
                serverResponseCode = conn.getResponseCode();
                String serverResponseMessage = conn.getResponseMessage();

                //Log.i("uploadFile", "HTTP Response is : " + serverResponseMessage + ": " + serverResponseCode);
                System.out.println("uploadFile"+"HTTP Response is : " + serverResponseMessage + ": " + serverResponseCode);

                if (serverResponseCode == 200) {

                }
                fileInputStream.close();
                dos.flush();
                dos.close();
            } catch (MalformedURLException ex) {

                ex.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
            if(serverResponseCode != 200)
            {
                visitPath=uploadFile="NA";
            }
            return serverResponseCode;
        } // End else block
    }
    
    
    
    
     public int uploadFile_vend(String sourceFileUri,String server_path1) {

        System.out.println("sourceFileUri="+sourceFileUri+" upLoadServerUri="+upLoadServerUri2);

            uploadFile=server_path1;
        visitPath=viewUrl.replace("upload","")+"/"+uploadFile;

        String fileName = sourceFileUri;

        HttpURLConnection conn = null;
        DataOutputStream dos = null;
        String lineEnd = "\r\n";
        String twoHyphens = "--";
        String boundary = "*****";
        int bytesRead, bytesAvailable, bufferSize;
        byte[] buffer;
        int maxBufferSize = 1 * 1024 * 1024;
        File sourceFile = new File(sourceFileUri);

        if (!sourceFile.isFile()) {

            System.out.println("Source File not exist :" + sourceFileUri );
            return 0;

        } else {
            try {

                SSLTrustManager sslTrustManager = new SSLTrustManager();
                SSLSocketFactory sslSocketFactory = sslTrustManager.GetSocketFactory();

                HttpsURLConnection.setDefaultSSLSocketFactory( sslSocketFactory  );
                HttpsURLConnection.setDefaultHostnameVerifier(new NullHostNameVerifier());
// open a URL connection to the Servlet
                FileInputStream fileInputStream = new FileInputStream(sourceFile);
                URL url = new URL(upLoadServerUri2);

// Open a HTTP  connection to  the URL
                if(upLoadServerUri2.contains("https://"))
                    conn = (HttpsURLConnection) url.openConnection();
                else
                    conn = (HttpURLConnection) url.openConnection();
                conn.setDoInput(true); // Allow Inputs
                conn.setDoOutput(true); // Allow Outputs
                conn.setUseCaches(false); // Don't use a Cached Copy
                conn.setRequestMethod("POST");
                conn.setRequestProperty("Connection", "Keep-Alive");
                conn.setRequestProperty("ENCTYPE", "multipart/form-data");
                conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
                //conn.setRequestProperty("uploaded_file", fileName);
                conn.setRequestProperty("file", uploadFile);

                dos = new DataOutputStream(conn.getOutputStream());

                dos.writeBytes(twoHyphens + boundary + lineEnd);
                dos.writeBytes("Content-Disposition: form-data; name=\"file\";filename=\"" + uploadFile + "\"" + lineEnd);

                dos.writeBytes(lineEnd);
                bytesAvailable = fileInputStream.available();
                bufferSize = Math.min(bytesAvailable, maxBufferSize);
                buffer = new byte[bufferSize];
                bytesRead = fileInputStream.read(buffer, 0, bufferSize);

                while (bytesRead > 0) {

                    dos.write(buffer, 0, bufferSize);
                    bytesAvailable = fileInputStream.available();
                    bufferSize = Math.min(bytesAvailable, maxBufferSize);
                    bytesRead = fileInputStream.read(buffer, 0, bufferSize);

                }
                dos.writeBytes(lineEnd);
                dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
                serverResponseCode = conn.getResponseCode();
                String serverResponseMessage = conn.getResponseMessage();

                //Log.i("uploadFile", "HTTP Response is : " + serverResponseMessage + ": " + serverResponseCode);
                System.out.println("uploadFile"+"HTTP Response is : " + serverResponseMessage + ": " + serverResponseCode);

                if (serverResponseCode == 200) {

                }
                fileInputStream.close();
                dos.flush();
                dos.close();
            } catch (MalformedURLException ex) {

                ex.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
            if(serverResponseCode != 200)
            {
                visitPath=uploadFile="NA";
            }
            return serverResponseCode;
        } // End else block
    }
}
