package com.jay.Atmos;
import android.annotation.SuppressLint;
import android.content.ComponentName;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.TransitionDrawable;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageButton;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.widget.Toolbar;
import androidx.core.content.ContextCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.android.material.navigation.NavigationView;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.GithubAuthCredential;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.ismaeldivita.chipnavigation.ChipNavigationBar;
import com.jay.Atmos.Fragment.HomeFragment;
import com.jay.Atmos.Fragment.NotificationFragment;
import com.jay.Atmos.Fragment.ProfileFragment;
import com.jay.Atmos.Fragment.SearchFragment;
import com.jay.Atmos.calling.BaseActivity;
import com.jay.Atmos.calling.SinchService;
import com.sinch.android.rtc.SinchError;
import com.squareup.picasso.Picasso;
import java.util.Objects;
import de.hdodenhof.circleimageview.CircleImageView;
public class MainActivity  extends BaseActivity implements SinchService.StartFailedListener {
    Fragment selectedFagrament = null;
    DatabaseReference RootRef;
    private ImageButton ChatButton;
    private Toolbar mToolbar;
    int prev_nav_item = 0;
    private CircleImageView navProfileImage;
    private TextView navUserName;
    private ActionBarDrawerToggle actionBarDrawerToggle;
    private NavigationView navigationView;
    private DrawerLayout drawerLayout;
    Fragment fragment;
    private FirebaseUser currentUser;
    private FirebaseAuth mAuth;
    ChipNavigationBar BottomNavBar;
    FragmentManager fragmentManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mAuth = FirebaseAuth.getInstance();
        currentUser = mAuth.getCurrentUser();
        RootRef = FirebaseDatabase.getInstance().getReference().child("Users");
        BottomNavBar = findViewById(R.id.bottom_nav_bar);
//
//        RelativeLayout bganim = findViewById(R.id.bganim);
//
////
//        TransitionDrawable trans = (TransitionDrawable) bganim.getBackground();
//        trans.startTransition(3000);
////        trans.reverseTransition(500);
//        trans.mutate();
//        trans.canApplyTheme();
        ChatButton = findViewById(R.id.ChatBtn);
        initializechatbutton();
        mToolbar = (Toolbar) findViewById(R.id.explore_toolbar);
        setSupportActionBar(mToolbar);
        Objects.requireNonNull(getSupportActionBar()).setTitle("Vish Me");
//        getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
//        getSupportActionBar().setDisplayShowCustomEnabled(true);
//        getSupportActionBar().setCustomView(R.layout.app_bar_layout);
//        getSupportActionBar().setDisplayShowCustomEnabled(true);
//        View view =getSupportActionBar().getCustomView();
//
        drawerLayout = (DrawerLayout) findViewById(R.id.drawyer_layout);
        actionBarDrawerToggle = new ActionBarDrawerToggle(MainActivity.this, drawerLayout, R.string.drawer_open, R.string.drawer_close);
        drawerLayout.addDrawerListener(actionBarDrawerToggle);
        actionBarDrawerToggle.setHomeAsUpIndicator(R.drawable.ic_arrowoption);
        actionBarDrawerToggle.syncState();
        actionBarDrawerToggle.setDrawerSlideAnimationEnabled(true);
        actionBarDrawerToggle.setDrawerIndicatorEnabled(true);
//
        if (currentUser == null) {
            SendUserToLoginActivity();
        } else
        {
            VerifyUserExistence();
            Bundle intent = getIntent().getExtras();
        if(intent != null) {
            String publisher = intent.getString("publisherid");
            SharedPreferences.Editor editor = getSharedPreferences("PREFS", MODE_PRIVATE).edit();
            editor.putString("profileid", publisher);
            editor.apply();
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new ProfileFragment()).commit();
        }
        }
//
            drawerLayout = (DrawerLayout) findViewById(R.id.drawyer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                MainActivity.this, drawerLayout, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawerLayout.setDrawerListener(toggle);
        actionBarDrawerToggle = new ActionBarDrawerToggle(MainActivity.this, drawerLayout, R.string.drawer_open, R.string.drawer_close);
        drawerLayout.addDrawerListener(actionBarDrawerToggle);
        actionBarDrawerToggle.syncState();
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        navigationView = (NavigationView) findViewById(R.id.navigation_view);
        View navView = navigationView.inflateHeaderView(R.layout.navigation_header);
        navProfileImage = (CircleImageView) navView.findViewById(R.id.nav_profile_image);
        navUserName = (TextView) navView.findViewById(R.id.nav_profile_name);
//       selectedFagrament = new HomeFragment();
                    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                            new HomeFragment()).addToBackStack("home").commit();
                    ChatButton.setVisibility(View.VISIBLE);
        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem Item) {
                NavMenuSelector(Item);
                return false;
            }
        });
        if (savedInstanceState==null)
        {
            BottomNavBar.setItemSelected(R.id.nav_home,true);
            fragmentManager = getSupportFragmentManager();
            HomeFragment homeFragment = new HomeFragment();
            fragmentManager.beginTransaction().replace(R.id.fragment_container , homeFragment).commit();
        }
        BottomNavBar.setOnItemSelectedListener(new ChipNavigationBar.OnItemSelectedListener() {
            private final String TAG = MainActivity.class.getSimpleName();
            @SuppressLint("NonConstantResourceId")
            @Override
            public void onItemSelected(int id) {
                 fragment = null;
                switch (id)
                {
                    case R.id.nav_home:
                        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                                new HomeFragment()).addToBackStack("home").commit();
                        ChatButton.setVisibility(View.VISIBLE);
                        break;
                    case R.id.nav_search:
                        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                                new SearchFragment()).addToBackStack("search").commit();
                        ChatButton.setVisibility(View.GONE);
                      //  mToolbar.setVisibility(View.GONE);
                        break;
                    case R.id.nav_add:
                        selectedFagrament = null;
                        startActivity(new Intent(MainActivity.this, PostActivity.class));
                        break;
                    case R.id.nav_heart:
                        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                                new NotificationFragment()).addToBackStack("notify").commit();
                        ChatButton.setVisibility(View.GONE);
                        mToolbar.setVisibility(View.GONE);
                        break;
                    case R.id.nav_profile:
                        SharedPreferences.Editor editor = getSharedPreferences("PREFS", MODE_PRIVATE).edit();
                        editor.putString("profileid", currentUser.getUid());
                        editor.apply();
                        ChatButton.setVisibility(View.GONE);
                        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                                new ProfileFragment()).addToBackStack("profile").commit();
                        break;
                }
                if (fragment!=null)
                {
                    fragmentManager = getSupportFragmentManager();
                    fragmentManager.beginTransaction().replace(R.id.fragment_container,
                            fragment).commit();
                }
                else
                {
                    Log.e(TAG , "Error");
                }
            }
        });
        ChatButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                selectedFagrament = null;
                Intent ChatIntent = new Intent(MainActivity.this, ChatListActivity.class);
                startActivity(ChatIntent);
            }
        });
    }
    private void initializechatbutton() {
    }
            private void NavMenuSelector (MenuItem Item){
                switch (Item.getItemId()) {
                    case R.id.BirthDays:
                        Toast.makeText(this, "Birthdays selected", Toast.LENGTH_SHORT).show();
                        break;
                    case R.id.shortClips:
                        //  Intent Intent = new Intent(MainActivity.this, ScreenShareActivity.class);
                        // startActivity(Intent);                break;
                    case R.id.short_Films:
                        Toast.makeText(this, "ShortFilms selected", Toast.LENGTH_SHORT).show();
                        break;
                    case R.id.marketing:
                        Toast.makeText(this, "Marketing selected", Toast.LENGTH_SHORT).show();
                        break;
                    case R.id.Find_Friends_option:
                        Toast.makeText(this, "Find Friends selected", Toast.LENGTH_SHORT).show();
                        break;
                    case R.id.my_contacts:
                        Toast.makeText(this, "My Friends selected", Toast.LENGTH_SHORT).show();
                        break;
                    case R.id.privacy_Settings_option:
                        Toast.makeText(this, "Privacy Settings selected", Toast.LENGTH_SHORT).show();
                        break;
                    case R.id.main_Log_Out_option:
                        mAuth.signOut();
                        SendUserToLoginActivity();
                        break;
                }
            }
            private void SendUserToLoginActivity () {
                Intent editprofile = new Intent(MainActivity.this, AccountLoginActivity.class);
                startActivity(editprofile);
            }
            @Override
            public boolean onOptionsItemSelected (MenuItem item){
                if (actionBarDrawerToggle.onOptionsItemSelected(item)) {
                    return true;
                }
                return super.onOptionsItemSelected(item);
            }
            private void VerifyUserExistence () {
                RootRef.child(currentUser.getUid()).addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        if ((dataSnapshot.exists()) && (dataSnapshot.hasChild("username") && (dataSnapshot.hasChild("profileimage") && (dataSnapshot.hasChild("fullName"))))) {
                            String retrieveUserName = dataSnapshot.child("username").getValue().toString();
                            String retrieveProfileImage = dataSnapshot.child("profileimage").getValue().toString();
//                    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
//                            new HomeFragment()).commit();
                            navUserName.setText(retrieveUserName);
                            Picasso.get().load(retrieveProfileImage).placeholder(R.drawable.profilepic).into(navProfileImage);
                            if (!getSinchServiceInterface().isStarted()) {
                                initiateSinch();
//
                            }
//
                            updateNavMenu();
                        } else if ((dataSnapshot.exists()) && (dataSnapshot.hasChild("username") && (dataSnapshot.hasChild("fullName")))) {
                            String retrieveUserName = dataSnapshot.child("username").getValue().toString();
                            updateNavMenu();
//
//                    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
//                            new HomeFragment()).commit();
//
                            if (!getSinchServiceInterface().isStarted()) {
                                initiateSinch();
//
                            }
                            navUserName.setText(retrieveUserName);
                        } else if ((dataSnapshot.child("username").exists())) {
                            String retrieveUserName = dataSnapshot.child("username").getValue().toString();
                            navUserName.setText(retrieveUserName);
                    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                            new HomeFragment()).commit();
                            updateNavMenu();
                            if (!getSinchServiceInterface().isStarted()) {
                                initiateSinch();
//
                            }
                        } else {
                            SendUserTosettingsActivity();
                            Toast.makeText(MainActivity.this, "Update your profile for settings!!!!!", Toast.LENGTH_SHORT).show();
                        }
                    }
                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                    }
                });
            }
            private void updateNavMenu () {
                String currentUserid = currentUser.getUid();
                RootRef.child(currentUserid).addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        if ((dataSnapshot.exists()) && (dataSnapshot.hasChild("username") && (dataSnapshot.hasChild("profileimage") && (dataSnapshot.hasChild("fullName"))))) {
                            String retrieveUserName = dataSnapshot.child("username").getValue().toString();
                            String retrieveProfileImage = dataSnapshot.child("profileimage").getValue().toString();
                            navUserName.setText(retrieveUserName);
                            Picasso.get().load(retrieveProfileImage).placeholder(R.drawable.profilepic).into(navProfileImage);
                        } else if ((dataSnapshot.exists()) && (dataSnapshot.hasChild("username") && (dataSnapshot.hasChild("fullName")))) {
                            String retrieveUserName = dataSnapshot.child("username").getValue().toString();
                            navUserName.setText(retrieveUserName);
                        } else {
                            navUserName.setVisibility(View.INVISIBLE);
                            Toast.makeText(MainActivity.this, "Set profile NAVIGATION", Toast.LENGTH_SHORT).show();
                        }
                    }
                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                    }
                });
            }
            private void SendUserTosettingsActivity ()
            {
                Intent editprofile = new Intent(MainActivity.this, SettingsActivity.class);
                startActivity(editprofile);
            }
            private void initiateSinch () {
                if (!getSinchServiceInterface().isStarted()) {
                    Intent serviceIntent = new Intent(MainActivity.this, SinchService.class);
                    serviceIntent.putExtra("inputExtra", currentUser.getUid());
                    ContextCompat.startForegroundService(MainActivity.this, serviceIntent);
                    getSinchServiceInterface().startClient(currentUser.getUid());
                }
            }
            @Override
            protected void onServiceConnected () {
                getSinchServiceInterface().setStartListener(this);
            }
    @Override
    public void onBackPressed() {
//        if (fragment!=null)
//        {
//            fragmentManager = getSupportFragmentManager();
//
//            fragmentManager.beginTransaction().replace(R.id.fragment_container,
//                    fragment).commit();
//        }///
        super.onBackPressed();
    }
    @Override
            public void onBindingDied (ComponentName name){
                if (!getSinchServiceInterface().isStarted()) {
                    Intent serviceIntent = new Intent(MainActivity.this, SinchService.class);
                    serviceIntent.putExtra("inputExtra", currentUser.getUid());
                    ContextCompat.startForegroundService(MainActivity.this, serviceIntent);
                    getSinchServiceInterface().startClient(currentUser.getUid());
                }
            }
            @Override
            protected void onStart () {
                super.onStart();
            }
            @Override
            protected void onPause () {
                Toast.makeText(this, "on pause", Toast.LENGTH_SHORT).show();
                super.onPause();
            }
            @Override
            protected void onResume () {
                Toast.makeText(this, "on pause", Toast.LENGTH_SHORT).show();
                super.onResume();
            }
            @Override
            protected void onRestart () {
                super.onRestart();
            }
            @Override
            public void onStartFailed (SinchError error){
                Toast.makeText(this, error.toString(), Toast.LENGTH_LONG).show();
                if (!getSinchServiceInterface().isStarted()) {
                    Intent serviceIntent = new Intent(MainActivity.this, SinchService.class);
                    serviceIntent.putExtra("inputExtra", currentUser.getUid());
                    ContextCompat.startForegroundService(MainActivity.this, serviceIntent);
                    getSinchServiceInterface().startClient(currentUser.getUid());
                }
                //////////////////////////////////////////////
            }
            @Override
            public void onStarted () {
                Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show();
               // finish();
            }
}
i have a main activity with a bottom navigation menu which has a inter changing frangment. i also have a button which changes to other activity. when i try to go to other activity it gives a error displaying " FATAL EXCEPTION: main Process: com.jay.Atmos, PID: 10737 java.lang.IllegalArgumentException: No view found for id 0x7f0a0199 (com.jay.Atmos:id/fragment_container) for fragment HomeFragment{4d85ba} (187ff6c1-438d-411d-97cd-cf6946773579 id=0x7f0a0199) at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:513) at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282) at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189) at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2100) at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002) at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3138) at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:3072) at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:251) at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:502) at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:246) at com.jay.Atmos.MainActivity.onStart(MainActivity.java:662) at com.jay.Atmos.ChatActivity.onStart(ChatActivity.java:961) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1435) at android.app.Activity.performStart(Activity.java:8231) at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3872) at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221) at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201) at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2336) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:246) at android.app.ActivityThread.main(ActivityThread.java:8653) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130) "
