package com.google.firebase.example.fireeats.ui.detail;

import android.content.Context;
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.example.fireeats.R;
import com.google.firebase.example.fireeats.databinding.DialogRatingBinding;
import com.google.firebase.example.fireeats.model.Rating;

/**
 * Dialog Fragment containing rating form.
 */
public class RatingDialogFragment extends DialogFragment {

    public static final String TAG = "RatingDialog";

    interface RatingListener {
        void onRating(Rating rating);
    }

    public interface RatingDialogHandler {
        void addRate(boolean cancel, float rate, CharSequence text);
    }

    private RatingListener mRatingListener;
    private DialogRatingBinding binding;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater,
                             @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        binding = DataBindingUtil.inflate(inflater, R.layout.dialog_rating, container, false);
        binding.setHandler((cancel, rate, text) -> {
            if (! cancel) {
                final Rating rating = new Rating(FirebaseAuth.getInstance().getCurrentUser(), rate, text.toString());
                if (mRatingListener != null) {
                    mRatingListener.onRating(rating);
                }
            }
            dismiss();
        });
        return binding.getRoot();
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);

        if (context instanceof RatingListener) {
            mRatingListener = (RatingListener) context;
        }
    }

    @Override
    public void onResume() {
        super.onResume();
        getDialog().getWindow().setLayout(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT);
    }
}