package com.webileapps.excalibur;

import android.app.FragmentTransaction;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.IBinder;
import android.content.ServiceConnection;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import com.webileapps.R;

public class ExcaliburActivity extends AppCompatActivity implements ServiceConnection {
    static final String TAG = "ExcaliburActivity";
    private ExcaliburService excaliburService;
    private boolean isServiceConnecting = false;
    private ExcaliburFragment excaliburFragment;
    private ServiceConnection serviceConnection = this;
    private Toolbar toolbar;
    private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            ExcaliburActivity.this.updateUIDetails();
        }
    };

    public ExcaliburActivity() {
    }

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.activity_excalibur);
        toolbar = findViewById(R.id.toolbar_calibur);
        setSupportActionBar(this.toolbar);
        getSupportActionBar().setTitle("Chat");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setElevation(1.0F);
        toolbar.getNavigationIcon().setColorFilter(Color.parseColor("#FFFFFF"), PorterDuff.Mode.SRC_ATOP);

        toolbar.setBackgroundColor(getResources().getColor(R.color.bfsi));


//        IntentFilter filter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
//        filter.addAction(this.getPackageName() + ".REFRESH_EXCALIBUR_INTERFACE");
//        LocalBroadcastManager.getInstance(this).registerReceiver(this.broadcastReceiver, filter);
    }

    protected void onResume() {
        super.onResume();
        this.connectWithService();
        this.setActivityActive(true);
        ExcaliburNotification.cancelNotification(this);
    }

    protected void onPause() {
        super.onPause();
        this.setActivityActive(false);
    }

    protected void onDestroy() {
        super.onDestroy();
        this.unbindService(this.serviceConnection);
//        LocalBroadcastManager.getInstance(this).unregisterReceiver(this.broadcastReceiver);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
//        MenuInflater menuInflater = getMenuInflater();
//        menuInflater.inflate(R.menu.chat_screen_menu, menu);

        return true;
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        super.onOptionsItemSelected(item);

//        if (item.getItemId() == R.id.call_operator_menu) {
//            Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + "18002000911"));
//            startActivity(intent);
//
//        }
//
        if (item.getItemId() == 16908332){
            finish();
            return false;

        }

        return true;
    }


//    public boolean onOptionsItemSelected(MenuItem item) {
//        switch(item.getItemId()) {
//            case 16908332:
//                this.finish();
//                return false;
//            default:
//                return super.onOptionsItemSelected(item);
//        }
//    }

    private void addFragment() {
        if (this.excaliburService != null) {
            Log.d("ExcaliburActivity", "Add Fragment from Activity");
            this.excaliburFragment = this.excaliburService.getFragment();
            Log.d("ExcaliburActivity", "Frag: " + (this.excaliburFragment != null));
            FragmentTransaction ft = this.getFragmentManager().beginTransaction();
            ft.add(R.id.excalibur_layout, this.excaliburFragment, "ExcaliburActivity#Fragment").commit();
            this.getWindow().setSoftInputMode(16);
            this.updateUIDetails();
        }

    }

    public void onServiceConnected(ComponentName name, IBinder service) {
        ExcaliburService.ExcaliburBinder binder = (ExcaliburService.ExcaliburBinder) service;
        this.excaliburService = binder.getService();
        this.addFragment();
    }

    public void onServiceDisconnected(ComponentName name) {
        this.excaliburService = null;
        this.isServiceConnecting = false;
    }

    private void updateUIDetails() {
        if (this.excaliburFragment != null) {
            Log.d("ExcaliburActivity", "Update UI from Activity");
            Log.d("ExcaliburActivity", "DDD updateUIDetails");
//            this.toolbar.setTitle(this.excaliburFragment.getTitle());
//            this.toolbar.setBackgroundColor(this.excaliburFragment.getBgColor());
//            this.toolbar.setTitleTextColor(this.excaliburFragment.getTextColor());
//            this.toolbar.getNavigationIcon().setColorFilter(this.excaliburFragment.getTextColor(), PorterDuff.Mode.SRC_ATOP);
//            this.excaliburFragment.startRoom();
        }

    }

    private void setActivityActive(boolean isShown) {
        SharedPreferences.Editor editor = this.getSharedPreferences("com.webileapps.excalibur", 0).edit();
        editor.putBoolean("IS_ACTIVITY_ACTIVE", isShown);
        editor.apply();
    }

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.d("ExcaliburActivity", "onActivityResult");
        this.excaliburFragment.fileUploadResult(requestCode, resultCode, data);
    }

    private void connectWithService() {
        if (!this.isServiceConnecting) {
            Intent intent = new Intent(this, ExcaliburService.class);
            this.startService(intent);
            this.bindService(intent, this.serviceConnection, BIND_AUTO_CREATE);
            this.isServiceConnecting = true;
        }

    }
}
