package com.bluefin.door;

import android.annotation.SuppressLint;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import com.androidnetworking.AndroidNetworking;
import com.androidnetworking.common.Priority;
import com.androidnetworking.error.ANError;
import com.androidnetworking.interfaces.JSONObjectRequestListener;

import org.json.JSONException;
import org.json.JSONObject;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;

public class dashboard extends AppCompatActivity {
    public static final String DATABASE_NAME = "doorofhopedatabase";
    private static final int TIMEOUT_MILLISEC = 100000;
    private ProgressDialog progressDialog;
    SQLiteDatabase mDatabase;

    UserSessionManager session;
    Button b1,b2,b3,b4,b5,b6,b7;

    String clientref;

    private ProgressBar pgsBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try
        {
            this.getSupportActionBar().hide();
        }
        catch (NullPointerException e){}

        mDatabase = openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE, null);
        createClientTable();

        // Session class instance
        session = new UserSessionManager(getApplicationContext());
        session.checkLogin();


        setContentView(R.layout.activity_dashboard);


        //session.clearRefId();

        pgsBar = (ProgressBar) findViewById(R.id.pBar);
        b1 = (Button)findViewById(R.id.uwajibikajikwajamii);
        b7 = (Button)findViewById(R.id.wasimamizi);
        b5 = (Button)findViewById(R.id.rushwayangono);
        b6 = (Button)findViewById(R.id.mwanamkeuomgozi);
        b4 = (Button)findViewById(R.id.taarifafupi);
        b2 = (Button)findViewById(R.id.tumadata);
        b3 = (Button)findViewById(R.id.logot);

        viewAll();
        b6.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                session.clearRefId();
                generaterefid();
                Intent intent2 = new Intent(getApplicationContext(), mwanamkenauongozi.class);
                startActivity(intent2);

            }
        });

        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                session.clearRefId();
                generaterefid();
                Intent intent2 = new Intent(getApplicationContext(), ufuatiliajiwauwajibikajikwajamii.class);
                startActivity(intent2);

            }
        });

        b7.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                session.clearRefId();
                generaterefid();
                Intent intent2 = new Intent(getApplicationContext(), watoahudumanawasimamizi.class);
                startActivity(intent2);

            }
        });

        b5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                session.clearRefId();
                generaterefid();
                Intent intent2 = new Intent(getApplicationContext(), rushwayangononaukatilowakijinsia.class);
                startActivity(intent2);

            }
        });


        b2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if(isNetworkConnected())
                {
                    pgsBar.setVisibility(v.VISIBLE);

                    tumaData();

                    pgsBar.setVisibility(v.GONE);
                }

            }
        });

        b3.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                session.logoutUser();
            }
        });
    }

    private void init()
    {
        this.progressDialog = new ProgressDialog(this);
    }

    private void showDialog1()
    {
        progressDialog.setCancelable(false);
        progressDialog.show();
        progressDialog.setContentView(R.layout.layout_pdialog);
    }
    public void viewAll()
    {
        b4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                StringBuffer buffer = new StringBuffer();
                buffer.append("Jumla Ya Taarifa Zilizokusanywa: "+getProfilesCount()+" \n");
                buffer.append("Jumla Ya Taarifa Zilizotumwa: "+getTaarifaZilizotumwa()+" \n\n");

                buffer.append("Taarifa Zilizokusanywa Leo: "+getTaarifaZilizokusanywaleo()+"\n");
                buffer.append("Taarifa Zilizotumwa Leo: "+getTaarifaZilizotumwaleo()+" \n");

                showMessage("Taarifa Fupi",buffer.toString());
            }
        });

    }
    public String getTaarifaZilizokusanywaleo() {

        Date c = Calendar.getInstance().getTime();
        System.out.println("Current time => " + c);

        SimpleDateFormat df = new SimpleDateFormat("yyyy-M-dd");
        String formattedDate = df.format(c);

        System.out.println("Current timeeee => " + formattedDate);

        String clinerefid="0";

        Cursor cursorEmployees = mDatabase.rawQuery("SELECT count(clinerefid) as tcount  FROM clientdetails where tareherekodi  ='"+formattedDate.trim()+"'  ", null);
        if (cursorEmployees.moveToFirst()) {

            clinerefid = cursorEmployees.getString(0);


        }
        cursorEmployees.close();


        return clinerefid;
    }
    public String getProfilesCount() {

        String clinerefid=null;
        Cursor cursorEmployees = mDatabase.rawQuery("SELECT count(clinerefid) as tcount FROM clientdetails ", null);
        if (cursorEmployees.moveToFirst()) {



            clinerefid = cursorEmployees.getString(0);

        }
        cursorEmployees.close();


        return clinerefid;
    }
    public String getTaarifaZilizotumwaleo() {

        Date c = Calendar.getInstance().getTime();


        SimpleDateFormat df = new SimpleDateFormat("yyyy-M-dd");
        String formattedDate = df.format(c);

        String clinerefid="0";
        Cursor cursorEmployees = mDatabase.rawQuery("SELECT count(clinerefid) as tcount FROM clientdetails where is_sent=1 AND tareherekodi ='"+formattedDate.trim()+"' ", null);
        if (cursorEmployees.moveToFirst()) {

            Log.d("myTag", formattedDate);
            clinerefid = cursorEmployees.getString(0);

        }
        cursorEmployees.close();


        return clinerefid;
    }
    public String getTaarifaZilizotumwa() {

        String clinerefid=null;
        Cursor cursorEmployees = mDatabase.rawQuery("SELECT count(clinerefid) as tcount FROM clientdetails where is_sent=1", null);
        if (cursorEmployees.moveToFirst()) {



            clinerefid = cursorEmployees.getString(0);

        }
        cursorEmployees.close();


        return clinerefid;
    }
    public void showMessage(String title,String Message)
    {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setCancelable(true);
        builder.setTitle(title);
        builder.setMessage(Message);
        builder.show();
    }
    @SuppressLint("MissingPermission")
    private boolean isNetworkConnected() {
        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

        return cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected();
    }
    public void tumaData()
    {
        if(isNetworkConnected())
        {
            //showDialog1();
            OutputStream os = null;
            InputStream is = null;
            HttpURLConnection conn = null;

            Cursor cursorUsers = mDatabase.rawQuery("SELECT * FROM tbl_users Limit 1", null);
            if (cursorUsers.moveToFirst()) {

                final String parajinakamili= cursorUsers.getString(0);
                final String paranambayasimu= cursorUsers.getString(1);
                final String parajinsia= cursorUsers.getString(2);


                Cursor cursorEmployees = mDatabase.rawQuery("SELECT * FROM clientdetails where is_sent=0", null);
                if (cursorEmployees.moveToFirst()) {

                    do {

                        final String clinerefid= cursorEmployees.getString(0);
                        final String tareherekodi= cursorEmployees.getString(1);
                        final String jinakamili= cursorEmployees.getString(2);
                        final String nambayasimu= cursorEmployees.getString(3);
                        final String jinsia= cursorEmployees.getString(4);
                        final String umri= cursorEmployees.getString(5);
                        final String wilaya= cursorEmployees.getString(6);
                        final String unashirikimchakatowamaendeleo = cursorEmployees.getString(7);
                        final String unalipakodi = cursorEmployees.getString(8);
                        final String unafuatiliamatumiziyafedha = cursorEmployees.getString(9);
                        final String unahudhuriamikutano = cursorEmployees.getString(10);
                        final String unatoamawazomaonikwauhuru = cursorEmployees.getString(11);
                        final String unakusanyavipaumbele = cursorEmployees.getString(12);
                        final String unahudumiawanachi = cursorEmployees.getString(13);
                        final String unshirikishawananchi = cursorEmployees.getString(14);
                        final String unatoamrejesho = cursorEmployees.getString(15);
                        final String unasimamiautoajiwahuduma = cursorEmployees.getString(16);
                        final String rushwangono = cursorEmployees.getString(17);
                        final String makosarushwangono = cursorEmployees.getString(18);
                        final String umewahikuombwa = cursorEmployees.getString(19);
                        final String wapiimekithiri = cursorEmployees.getString(20);
                        final String unawezakutoataarifa = cursorEmployees.getString(21);
                        final String atharizarushwayangono = cursorEmployees.getString(22);
                        final String atharikwajamiinamtu = cursorEmployees.getString(23);
                        final String ninikifanyike = cursorEmployees.getString(24);
                        final String umriwake = cursorEmployees.getString(25);
                        final String sektagani = cursorEmployees.getString(26);
                        final String umewahipatamafunzo = cursorEmployees.getString(27);
                        final String mafunzogani = cursorEmployees.getString(28);
                        final String ninifaidayakuwakiongozi = cursorEmployees.getString(29);
                        final String ninichangamotozakuwakiongozi = cursorEmployees.getString(30);
                        final String idadiyawanawake = cursorEmployees.getString(31);
                        final String kuongezaushirikiwawanawake = cursorEmployees.getString(32);
                        final String rushwawangonokwamisha = cursorEmployees.getString(33);
                        final String mkwamokupa = cursorEmployees.getString(34);
                        final String ainayaswali = cursorEmployees.getString(35);

                        Log.d("myTag2", tareherekodi);


                        new Thread(new Runnable() {
                            @Override
                            public void run() {

                                hifadhiData(clinerefid,tareherekodi,jinakamili,nambayasimu,jinsia,umri,wilaya,unakusanyavipaumbele, unahudumiawanachi, unshirikishawananchi, unatoamrejesho, unasimamiautoajiwahuduma,unashirikimchakatowamaendeleo, unalipakodi, unafuatiliamatumiziyafedha, unahudhuriamikutano, unatoamawazomaonikwauhuru,wapiimekithiri, unawezakutoataarifa, atharikwajamiinamtu, atharizarushwayangono, umewahikuombwa,makosarushwangono,rushwangono,mafunzogani, ninifaidayakuwakiongozi, ninichangamotozakuwakiongozi, idadiyawanawake, kuongezaushirikiwawanawake,mkwamokupa,sektagani,umewahipatamafunzo,rushwawangonokwamisha,ainayaswali,parajinakamili,paranambayasimu,parajinsia,ninikifanyike,umriwake);

                            }
                        }).start();

                        Log.d("myTagggg", clinerefid);
                    } while (cursorEmployees.moveToNext());
                }
                else
                {
                    Toast.makeText(this, "Asante Taarifa Zimeshatuwa", Toast.LENGTH_SHORT).show();


                }
                cursorEmployees.close();



                Toast.makeText(this, "Taarifa Zimetumwa Asante", Toast.LENGTH_SHORT).show();


            }
            cursorUsers.close();



        }
        else
        {
            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
            alertDialogBuilder.setMessage("Tafadhali Washa Data, Asante");
            alertDialogBuilder.setPositiveButton("Endelea",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface arg0, int arg1) {
                            finish();
                            Intent intent2 = new Intent(getApplicationContext(), dashboard.class);
                            startActivity(intent2);
                        }
                    });


            AlertDialog alertDialog = alertDialogBuilder.create();
            alertDialog.show();
            Toast.makeText(this, "Tafadhali washa Data, Asante", Toast.LENGTH_SHORT).show();
            String dd = "No Internet";
            Log.d("myTgggggag", dd);
        }



    }

    public void updateTaarifa(String clinerefid)
    {
        String isSent ="1";
        String updateSQL= "UPDATE clientdetails SET is_sent=? where clinerefid=?";

        try {
            mDatabase.execSQL(updateSQL, new String[]{isSent,clinerefid});
            Toast.makeText(this, "Taarifa Zimetumwa, Asante", Toast.LENGTH_SHORT).show();
        }catch (SQLiteException e) {
            if (!e.getMessage().startsWith("duplicate column name: flagged_count")) {
                Log.d("myTag",e.getMessage());
                throw e;

            }
        }
    }

    public void  hifadhiData(String clinerefid,String tareherekodi,String jinakamili,String nambayasimu,String jinsia,String umri,String wilaya,String unakusanyavipaumbele,String unahudumiawanachi, String unshirikishawananchi, String unatoamrejesho, String unasimamiautoajiwahuduma,String unashirikimchakatowamaendeleo,String unalipakodi, String unafuatiliamatumiziyafedha, String unahudhuriamikutano, String unatoamawazomaonikwauhuru,String wapiimekithiri, String unawezakutoataarifa, String atharikwajamiinamtu, String atharizarushwayangono, String umewahikuombwa,String makosarushwangono,String rushwangono,String mafunzogani, String ninifaidayakuwakiongozi, String ninichangamotozakuwakiongozi, String idadiyawanawake, String kuongezaushirikiwawanawake,String mkwamokupa,String sektagani,String umewahipatamafunzo,String rushwawangonokwamisha,String ainayaswali,String parajinakamili,String paranambayasimu,String parajinsia,String ninikifanyike,String umriwake)
    {
        final String  clinerefid1= clinerefid;
        JSONObject jsonObject = new JSONObject();
        try {
            jsonObject.put("clinerefid", clinerefid);
            jsonObject.put("tareherekodi", tareherekodi);
            jsonObject.put("jinakamili", jinakamili);
            jsonObject.put("nambayasimu", nambayasimu);
            jsonObject.put("jinsia", jinsia);
            jsonObject.put("umri", umri);
            jsonObject.put("wilaya", wilaya);
            jsonObject.put("unashirikimchakatowamaendeleo", unashirikimchakatowamaendeleo);
            jsonObject.put("unalipakodi", unalipakodi);
            jsonObject.put("unafuatiliamatumiziyafedha", unafuatiliamatumiziyafedha);
            jsonObject.put("unahudhuriamikutano", unahudhuriamikutano);
            jsonObject.put("unatoamawazomaonikwauhuru", unatoamawazomaonikwauhuru);
            jsonObject.put("unakusanyavipaumbele", unakusanyavipaumbele);
            jsonObject.put("unahudumiawanachi", unahudumiawanachi);
            jsonObject.put("unshirikishawananchi", unshirikishawananchi);
            jsonObject.put("unatoamrejesho", unatoamrejesho);
            jsonObject.put("unasimamiautoajiwahuduma", unasimamiautoajiwahuduma);
            jsonObject.put("rushwangono", rushwangono);
            jsonObject.put("makosarushwangono", makosarushwangono);
            jsonObject.put("umewahikuombwa", umewahikuombwa);
            jsonObject.put("wapiimekithiri", wapiimekithiri);
            jsonObject.put("unawezakutoataarifa", unawezakutoataarifa);
            jsonObject.put("atharizarushwayangono", atharizarushwayangono);
            jsonObject.put("atharikwajamiinamtu", atharikwajamiinamtu);
            jsonObject.put("ninikifanyike", ninikifanyike);
            jsonObject.put("umriwake", umriwake);
            jsonObject.put("sektagani", sektagani);
            jsonObject.put("umewahipatamafunzo", umewahipatamafunzo);
            jsonObject.put("mafunzogani", mafunzogani);
            jsonObject.put("ninifaidayakuwakiongozi", ninifaidayakuwakiongozi);
            jsonObject.put("ninichangamotozakuwakiongozi", ninichangamotozakuwakiongozi);
            jsonObject.put("idadiyawanawake", idadiyawanawake);
            jsonObject.put("kuongezaushirikiwawanawake", kuongezaushirikiwawanawake);
            jsonObject.put("rushwawangonokwamisha", rushwawangonokwamisha);
            jsonObject.put("mkwamokupa", mkwamokupa);
            jsonObject.put("ainayaswali", ainayaswali);
            jsonObject.put("paraname", parajinakamili);
            jsonObject.put("paranumber", paranambayasimu);
            jsonObject.put("parajinsia", parajinsia);

        } catch (JSONException e) {
            e.printStackTrace();
        }

        AndroidNetworking.post("https://bluefindigital.co.tz/doorofhopescript.php")
                .addJSONObjectBody(jsonObject) // posting json
                .setTag("test")
                .setPriority(Priority.MEDIUM)
                .build()
                .getAsJSONObject(new JSONObjectRequestListener(){
                    @Override
                    public void onResponse(JSONObject response) {

                        Log.d("response",response.toString());

                        updateTaarifa(clinerefid1);

                        //do anything with response
                    }
                    @Override
                    public void onError(ANError error) {
                        Log.d("ERROR",error.getErrorCode()+"");
                        Log.d("ERROR",error.getErrorDetail());

                        //handle error
                    }
                });
    }


    private  void generaterefid()
    {

        Long tsLong = System.currentTimeMillis()/1000;
        String ts = tsLong.toString();
        Random rnd = new Random();
        int number = rnd.nextInt(999999);

        //this will convert any number sequence into 6 character.
        String npp=String.format("%06d", number);
        clientref=npp+ts;

        Log.d("myTag", clientref);
        session.createClientRefSession(clientref);

    }


    private void createClientTable() {
        mDatabase.execSQL(
                "CREATE TABLE IF NOT EXISTS clientdetails (\n" +
                        "    clinerefid varchar(50) NOT NULL PRIMARY KEY,\n" +
                        "    tareherekodi varchar(200),\n"+
                        "    jinakamili varchar(200) NOT NULL,\n" +
                        "    nambayasimu varchar(200) NOT NULL,\n" +
                        "    jinsia varchar(50) NOT NULL,\n" +
                        "    umri varchar(200) NOT NULL,\n" +
                        "    wilaya varchar(200) NOT NULL,\n" +
                        "    unashirikimchakatowamaendeleo varchar(200),\n" +
                        "    unalipakodi varchar(200), \n" +
                        "    unafuatiliamatumiziyafedha varchar(200), \n" +
                        "    unahudhuriamikutano varchar(200), \n" +
                        "    unatoamawazomaonikwauhuru varchar(200), \n" +
                        "    unakusanyavipaumbele varchar(200), \n" +
                        "    unahudumiawanachi varchar(200), \n" +
                        "    unshirikishawananchi TEXT, \n" +
                        "    unatoamrejesho varchar(200), \n" +
                        "    unasimamiautoajiwahuduma varchar(200), \n" +
                        "    rushwangono varchar(200), \n" +
                        "    makosarushwangono varchar(200), \n" +
                        "    umewahikuombwa varchar(200), \n" +
                        "    wapiimekithiri varchar(200), \n" +
                        "    unawezakutoataarifa varchar(200), \n" +
                        "    atharizarushwayangono varchar(200), \n" +
                        "    atharikwajamiinamtu varchar(200), \n" +
                        "    ninikifanyike TEXT, \n" +
                        "    umriwake varchar(200), \n" +
                        "    sektagani varchar(200), \n" +
                        "    umewahipatamafunzo varchar(200), \n" +
                        "    mafunzogani TEXT, \n" +
                        "    ninifaidayakuwakiongozi TEXT, \n" +
                        "    ninichangamotozakuwakiongozi TEXT, \n" +
                        "    idadiyawanawake TEXT, \n" +
                        "    kuongezaushirikiwawanawake TEXT, \n" +
                        "    rushwawangonokwamisha TEXT, \n" +
                        "    mkwamokupa TEXT, \n" +
                        "    ainayaswali varchar(200), \n" +
                        "    is_sent int(4) DEFAULT 0 \n" +
                        ");"
        );
    }
    @Override
    public void onBackPressed() {
        // disable going back to the MainActivity
        moveTaskToBack(true);
    }
}
