package de.nenick.espressomacchiato.assertions.support;

import android.content.Context;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.test.espresso.NoMatchingViewException;
import android.support.test.espresso.ViewAssertion;
import android.support.test.espresso.matcher.ViewMatchers;
import android.support.v7.widget.Toolbar;
import android.view.View;

import de.nenick.espressomacchiato.tools.EspResourceTool;

import static org.hamcrest.Matchers.is;

public class AppBarLayoutAssertion {

    public static ViewAssertion assertIsExpanded() {
        return new ViewAssertion() {
            @Override
            public void check(View view, NoMatchingViewException noViewFoundException) {
                AppBarLayout appBarLayout = (AppBarLayout) view;
                boolean isFullExpanded = appBarLayout.getHeight() - appBarLayout.getBottom() == 0;
                ViewMatchers.assertThat("is full expanded", isFullExpanded, is(true));
            }
        };
    }


    public static ViewAssertion assertIsCollapsed() {
        return new ViewAssertion() {
            @Override
            public void check(View view, NoMatchingViewException noViewFoundException) {
                CollapsingToolbarLayout collapsingToolbarLayout = null;
                Toolbar toolbar = null;
                AppBarLayout appBarLayout = (AppBarLayout) view;

                for (int i = 0; i < appBarLayout.getChildCount(); i++) {
                    if(appBarLayout.getChildAt(i) instanceof CollapsingToolbarLayout) {
                        collapsingToolbarLayout = (CollapsingToolbarLayout) appBarLayout.getChildAt(i);
                    }
                }

                if(collapsingToolbarLayout == null) {
                    throw new IllegalStateException("Current only AppBarLayouts with CollapsingToolbarLayout are supported.");
                }

                for (int i = 0; i < collapsingToolbarLayout.getChildCount(); i++) {
                    if(collapsingToolbarLayout.getChildAt(i) instanceof Toolbar) {
                        toolbar = (Toolbar) collapsingToolbarLayout.getChildAt(i);
                    }
                }

                if(toolbar == null) {
                    throw new IllegalStateException("Current only CollapsingToolbarLayout with support Toolbar are supported.");
                }

                boolean isFullCollapsed = appBarLayout.getBottom() - toolbar.getHeight() == 0;
                isFullCollapsed |= appBarLayout.getBottom() - toolbar.getHeight() - EspResourceTool.getStatusBarHeight(view.getContext()) == 0;
                ViewMatchers.assertThat("is full collapsed", isFullCollapsed, is(true));
            }
        };
    }
}