package com.example.massa.luxvilla.utils;

import android.content.Context;
import android.content.SharedPreferences;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.example.massa.luxvilla.R;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.UserInfo;
import com.google.firebase.auth.UserProfileChangeRequest;
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.like.LikeButton;
import com.squareup.picasso.Picasso;

import de.hdodenhof.circleimageview.CircleImageView;


/**
 * Created by massa on 06/07/2017.
 */

public class firebaseutils {

    public static void getuserdata(final Context context, final TextView username, TextView useremail, final CircleImageView profileimage){
        String profileEmail = "";

        FirebaseAuth auth=FirebaseAuth.getInstance();
        FirebaseUser user=auth.getCurrentUser();

        if (user != null){
            user.reload().addOnSuccessListener(new OnSuccessListener<Void>() {
                @Override
                public void onSuccess(Void aVoid) {
                    FirebaseAuth auth=FirebaseAuth.getInstance();
                    FirebaseUser user=auth.getCurrentUser();
                    if (user !=null){
                        for (UserInfo userdata: user.getProviderData()) {

                            String profileDisplayName=userdata.getDisplayName();
                            Uri profilePhotoUrl=userdata.getPhotoUrl();

                            if (profilePhotoUrl !=null){
                                String image=profilePhotoUrl.toString();
                                Picasso.with(context)
                                        .load(image)
                                        .placeholder(R.drawable.profilelogo)
                                        .fit()
                                        .into(profileimage);
                            }
                            username.setText(profileDisplayName);
                        }
                    }

                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {

                }
            });
            profileEmail=user.getEmail();
        }

        useremail.setText(profileEmail);
    }

    public static void setbio(final TextView bio){
        FirebaseAuth auth=FirebaseAuth.getInstance();
        FirebaseUser user=auth.getCurrentUser();
        FirebaseDatabase database = FirebaseDatabase.getInstance();

        if (user !=null){
            DatabaseReference myRef = database.getReference("users").child(user.getUid()).child("user_bio");

            myRef.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if (dataSnapshot.exists()){
                        bio.setText(dataSnapshot.getValue(String.class));
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
        }
    }

    public static void setuserfirstdata(final Context context, String username){
        FirebaseAuth auth=FirebaseAuth.getInstance();
        FirebaseUser user = auth.getCurrentUser();
        UserProfileChangeRequest.Builder builder = new UserProfileChangeRequest.Builder();
        builder.setDisplayName(username);
        if (user !=null){
            user.updateProfile(builder.build()).addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (!task.isSuccessful()){
                        Toast.makeText(context,"Ocorreu um erro",Toast.LENGTH_LONG).show();
                    }
                }
            });
        }

    }

    public static void updateuserbio(String userbio, final LinearLayout linearLayout){
        FirebaseAuth auth=FirebaseAuth.getInstance();
        FirebaseUser user=auth.getCurrentUser();
        FirebaseDatabase database = FirebaseDatabase.getInstance();

        if (user !=null) {
            DatabaseReference myRef = database.getReference("users").child(user.getUid()).child("user_bio");

            myRef.setValue(userbio).addOnSuccessListener(new OnSuccessListener<Void>() {
                @Override
                public void onSuccess(Void aVoid) {

                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Snackbar.make(linearLayout,"Lamentamos mas ocorreu um erro",Snackbar.LENGTH_LONG).show();
                }
            });
        }
    }

    public static void updateusername(String username, final LinearLayout linearLayout){
        FirebaseAuth auth=FirebaseAuth.getInstance();
        FirebaseUser user=auth.getCurrentUser();
        UserProfileChangeRequest.Builder builder = new UserProfileChangeRequest.Builder();
        builder.setDisplayName(username);
        if (user !=null){
            user.updateProfile(builder.build()).addOnSuccessListener(new OnSuccessListener<Void>() {
                @Override
                public void onSuccess(Void aVoid) {

                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Snackbar.make(linearLayout,"Lamentamos mas ocorreu um erro",Snackbar.LENGTH_LONG).show();
                }
            });
        }
    }

    public static void checklike(final Context ctx, final String id, final LikeButton likeButton){
        final String PREFSNAME = "FAVS";
        String uid="";
        FirebaseAuth auth=FirebaseAuth.getInstance();
        FirebaseUser user=auth.getCurrentUser();
        if (user != null){
            uid=user.getUid();
        }
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference myRef = database.getReference("users").child(uid).child("likes");

        myRef.orderByKey().equalTo("heart"+id).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()){
                    SharedPreferences sharedPreferences=ctx.getSharedPreferences(PREFSNAME, 0);
                    SharedPreferences.Editor editor;
                    editor=sharedPreferences.edit();
                    editor.putInt(id, 1);
                    editor.apply();
                    likeButton.setLiked(true);
                }else{
                    SharedPreferences sharedPreferences=ctx.getSharedPreferences(PREFSNAME, 0);
                    SharedPreferences.Editor editor;
                    editor=sharedPreferences.edit();
                    editor.putInt(id, 0);
                    editor.apply();
                    likeButton.setLiked(false);
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

    public static void setlike(String id){
        String uid="";
        FirebaseAuth auth=FirebaseAuth.getInstance();
        FirebaseUser user=auth.getCurrentUser();
        if (user != null){
            uid=user.getUid();
        }
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference myRef = database.getReference("users").child(uid).child("likes");
        myRef.child("heart"+id).child("liked").setValue("true");
    }

    public static void removelike(String id){
        String uid="";
        FirebaseAuth auth=FirebaseAuth.getInstance();
        FirebaseUser user=auth.getCurrentUser();
        if (user != null){
            uid=user.getUid();
        }
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference myRef = database.getReference("users").child(uid).child("likes");
        myRef.child("heart"+id).removeValue();
    }
}