package com.mobify.astro.plugins.counterbadgeplugin;

import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;

import com.mobify.astro.ActivityTestBase;
import com.mobify.astro.PluginResolver;
import com.mobify.astro.messaging.EventManager;
import com.mobify.astro.messaging.MessageSender;

import org.junit.Before;
import org.junit.Test;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

public class CounterBadgePluginTest extends ActivityTestBase {

    private CounterBadgePlugin counterBadgePlugin;

    @Before
    public void setup() {
        PluginResolver mockPluginResolver = mock(PluginResolver.class);
        EventManager mockEventManager = mock(EventManager.class);
        MessageSender mockMessageSender = mock(MessageSender.class);
        counterBadgePlugin = new CounterBadgePlugin(getActivity(), mockPluginResolver, mockEventManager, mockMessageSender);
    }

    private BadgeView findBadgeView(View view1, View view2) {
        View toReturn = null;
        if (view1 instanceof BadgeView) {
            assertTrue(view2 instanceof ImageView);
            toReturn = view1;
        } else {
            assertTrue(view1 instanceof ImageView);
            assertTrue(view2 instanceof BadgeView);
            toReturn = view2;
        }
        return (BadgeView) toReturn;
    }

    @Test
    public void testInitialView() {
        RelativeLayout containerView = (RelativeLayout) counterBadgePlugin.getView();
        assertEquals(2, containerView.getChildCount());

        View firstChild = containerView.getChildAt(0);
        View secondChild = containerView.getChildAt(1);

        BadgeView badgeView = findBadgeView(firstChild, secondChild);
        assertEquals("", badgeView.getText());
        assertEquals(Color.WHITE, badgeView.getTextColors().getDefaultColor());
    }

    @Test
    public void testSetImagePath() throws Exception {
        ImageView imageViewMock = mock(ImageView.class);
        counterBadgePlugin.imageView = imageViewMock;

        counterBadgePlugin.setImagePath("file:///ic_launcher.png");

        verify(imageViewMock, times(1)).setImageDrawable(any(Drawable.class));
    }

    @Test
    public void testSetCount() {
        BadgeView badgeViewMock = mock(BadgeView.class);
        counterBadgePlugin.badgeView = badgeViewMock;

        counterBadgePlugin.setCount(2);

        verify(badgeViewMock, times(1)).setCount("2");
        verify(badgeViewMock, times(1)).setVisibility(View.VISIBLE);
    }

    @Test
    public void testSetBackgroundColor() {
        BadgeView badgeViewMock = mock(BadgeView.class);
        counterBadgePlugin.badgeView = badgeViewMock;

        String testColor = "#AABBCC";

        counterBadgePlugin.setBackgroundColor(testColor);

        verify(badgeViewMock, times(1)).setBackgroundColor(Color.parseColor(testColor));
    }

    @Test
    public void testSetTextColor() {
        BadgeView badgeViewMock = mock(BadgeView.class);
        counterBadgePlugin.badgeView = badgeViewMock;

        String testColor = "#112233";

        counterBadgePlugin.setTextColor(testColor);

        verify(badgeViewMock, times(1)).setTextColor(Color.parseColor(testColor));
    }
}
