package app.fedilab.fedilabtube.helper;
/* Copyright 2020 Thomas Schneider
 *
 * This file is a part of TubeLab
 *
 * This program is free software; you can redistribute it and/or modify it under the terms of the
 * GNU General Public License as published by the Free Software Foundation; either version 3 of the
 * License, or (at your option) any later version.
 *
 * TubeLab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
 * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
 * Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with TubeLab; if not,
 * see <http://www.gnu.org/licenses>. */

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.MediaController;

import app.fedilab.fedilabtube.PeertubeActivity;
import app.fedilab.fedilabtube.R;
import app.fedilab.fedilabtube.client.data.VideoData.Video;


/**
 * Created by Thomas
 * FullScreenMediaController. Inspired from the work at http://www.zoftino.com/android-videoview-playing-videos-full-screen
 */
public class FullScreenMediaController extends MediaController {

    private ImageButton fullScreen;
    private Button resolution;
    private Context context;
    private Video peertube;
    private String resolutionVal;

    public FullScreenMediaController(Context context) {
        super(context);
        this.context = context;
    }

    @SuppressWarnings({"unused", "RedundantSuppression"})
    public FullScreenMediaController(Context context, Video peertube) {
        super(context);
        this.peertube = peertube;
        this.context = context;
    }

    @Override
    public void setAnchorView(View view) {

        super.setAnchorView(view);

        //image button for full screen to be added to media controller
        fullScreen = new ImageButton(context);
        LayoutParams params =
                new LayoutParams(LayoutParams.WRAP_CONTENT,
                        LayoutParams.WRAP_CONTENT);
        params.gravity = Gravity.END;
        params.rightMargin = 80;
        params.topMargin = 22;
        addView(fullScreen, params);

        if (resolutionVal == null)
            resolutionVal = peertube.getFiles().get(0).getResolutions().getLabel() + "p";
        resolution = new Button(context);
        resolution.setAllCaps(false);
        resolution.setBackgroundColor(Color.TRANSPARENT);
        resolution.setText(resolutionVal);
        resolution.setPadding(0, 0, 0, 0);
        LayoutParams paramsButton =
                new LayoutParams(LayoutParams.WRAP_CONTENT,
                        LayoutParams.WRAP_CONTENT);
        paramsButton.gravity = Gravity.START;
        paramsButton.rightMargin = 80;
        paramsButton.topMargin = 22;
        resolution.setOnClickListener(v -> ((PeertubeActivity) getContext()).displayResolution());
        addView(resolution, paramsButton);

        if (((PeertubeActivity) getContext()).getFullscreen() == fullscreen.ON) {
            Resources resources = getResources();
            fullScreen.setImageDrawable(resources.getDrawable(R.drawable.ic_baseline_fullscreen_exit_24));
        } else {
            Resources resources = getResources();
            fullScreen.setImageDrawable(resources.getDrawable(R.drawable.ic_baseline_fullscreen_24));
        }

        //add listener to image button to handle full screen and exit full screen events
        fullScreen.setOnClickListener(v -> {

            if (((PeertubeActivity) getContext()).getFullscreen() == fullscreen.ON) {
                ((PeertubeActivity) getContext()).setFullscreen(fullscreen.OFF);
            } else {
                ((PeertubeActivity) getContext()).setFullscreen(fullscreen.ON);
            }
            ((PeertubeActivity) getContext()).change();
            changeIcon();
        });
    }

    @SuppressWarnings({"unused", "RedundantSuppression"})
    public void setResolutionVal(String resolutionVal) {
        this.resolutionVal = resolutionVal;
        if (resolution != null)
            resolution.setText(String.format("%sp", resolutionVal));
    }

    public void changeIcon() {
        //fullscreen indicator from intent
        if (((PeertubeActivity) getContext()).getFullscreen() == fullscreen.ON) {
            Resources resources = getResources();
            fullScreen.setImageDrawable(resources.getDrawable(R.drawable.ic_baseline_fullscreen_exit_24));
        } else {
            Resources resources = getResources();
            fullScreen.setImageDrawable(resources.getDrawable(R.drawable.ic_baseline_fullscreen_24));
        }
    }

    public enum fullscreen {
        OFF,
        ON
    }
}