package com.hhl.devheadline.ui.activity;

import android.content.Context;
import android.content.Intent;
import android.net.http.SslError;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.widget.Toolbar;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.ForegroundColorSpan;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
import android.webkit.SslErrorHandler;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.hhl.devheadline.R;
import com.hhl.devheadline.presenter.NoteDetailsPresenter;
import com.hhl.devheadline.ui.iview.INoteDetailsView;
import com.hhl.devheadline.utils.AppTools;
import com.hhl.devheadline.utils.ToastUtils;

import butterknife.Bind;
import rx.Observable;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.functions.Func1;
import rx.schedulers.Schedulers;

/**
 * Created by Administrator on 2016/3/29.
 */
public class NoteDetailsActivity extends BaseActivity<NoteDetailsPresenter> implements INoteDetailsView {

    private static final String ORIGINAL_URL = "original_url";

    @Bind(R.id.details_bar)
    ProgressBar progressBar;
    @Bind(R.id.details_webview)
    WebView webView;
    @Bind(R.id.toolbar)
    Toolbar toolbar;
    @Bind(R.id.notedetails_llbottom)
    RelativeLayout relativeLayout;
    @Bind(R.id.text_name)
    TextView textView;
    String loadingUrl;
    String title;
    Animation showAnim, dismissAnim;
    float downY = 0, offsetY = 0;

    /**
     * 启动{@link NoteDetailsActivity}
     *
     * @param context
     */
    public static void launch(Context context, String url) {
        Intent intent = new Intent(context, NoteDetailsActivity.class);
        intent.putExtra(ORIGINAL_URL, url);
        context.startActivity(intent);
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//        setSupportActionBar(toolbar);
        initVIew();
    }

    private void initVIew() {
        Observable.just(getResources().getString(R.string.notedetail_text_name)).map(new Func1<String, SpannableString>() {
            @Override
            public SpannableString call(String s) {
                SpannableString spanabelInfo = new SpannableString(s);
                int lenth = s.indexOf(getResources().getString(R.string.notedetail_hal));
                spanabelInfo.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.colorPrimary)),
                        lenth, lenth + getResources().getString(R.string.notedetail_halgyf).length() + 1,
                        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                return spanabelInfo;
            }
        }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).
                subscribe(new Action1<SpannableString>() {
                    @Override
                    public void call(SpannableString spanableInfo) {
                        textView.setText(spanableInfo);
                    }
                });
        showAnim = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.bottom_show);
        dismissAnim = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.bottom_dismiss);
        WebSettings webSettings = webView.getSettings();
        //先加载文字后加载图片
        if (Build.VERSION.SDK_INT >= 19) {
            webSettings.setLoadsImagesAutomatically(true);
        } else {
            webSettings.setLoadsImagesAutomatically(false);
        }
        webSettings.setJavaScriptEnabled(true);
        webSettings.setDefaultTextEncodingName("UTF-8");
        webSettings.setSupportZoom(false);
        webSettings.setUseWideViewPort(false);
//		webSettings.setBlockNetworkImage(true);
//		if (Build.VERSION.SDK_INT < 19) {
//			webSettings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
//		}
        webSettings.setLoadWithOverviewMode(true);
        webView.setWebViewClient(new MyWebViewClient());
        webView.setWebChromeClient(new MyWebChromeClient());
        loadingUrl = getIntent().getStringExtra(ORIGINAL_URL);
        webView.loadUrl(loadingUrl);
        webView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        downY = (int) event.getY();
                        break;
                    case MotionEvent.ACTION_MOVE:
                        int moveY = (int) event.getY();
                        offsetY = moveY - downY;
                        downY = moveY;
                        break;
                    case MotionEvent.ACTION_UP:
                        if (offsetY < 0) {
                            onScrollToBottom();
                        } else {
                            onScrollToTop();
                        }
                        break;
                }
                return false;
            }
        });

    }

    @Override
    protected int getContentView() {
        return R.layout.activity_notedetails;
    }

    @Override
    protected NoteDetailsPresenter getPresenter() {
        return new NoteDetailsPresenter(this);
    }

    class MyWebChromeClient extends WebChromeClient {

        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            if (newProgress == 100) {
                progressBar.setVisibility(View.GONE);
            } else {
                if (progressBar.getVisibility() == View.GONE) {
                    progressBar.setVisibility(View.VISIBLE);
                }
                if (newProgress > progressBar.getProgress()) {
                    progressBar.setProgress(newProgress);
                }
            }
            // TODO Auto-generated method stub
            super.onProgressChanged(view, newProgress);
        }

        @Override
        public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
            result.confirm();
            ToastUtils.toast(message);
            return true;
        }

        @Override
        public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {
            result.confirm();
            return super.onJsConfirm(view, url, message, result);
        }

        @Override
        public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
            result.confirm();
            return super.onJsPrompt(view, url, message, message, result);
        }

        @Override
        public void onReceivedTitle(WebView view, String title) {
            super.onReceivedTitle(view, title);
            toolbar.setTitle(AppTools.clipLongText(title));
            // 保存标题
            NoteDetailsActivity.this.title = title;
        }
    }

    public class MyWebViewClient extends WebViewClient {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return super.shouldOverrideUrlLoading(view, url);
        }

        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            super.onReceivedError(view, errorCode, description, failingUrl);
        }

        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
            // TODO Auto-generated method stub
            handler.proceed();
            super.onReceivedSslError(view, handler, error);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            //接触数据绑定
            view.getSettings().setBlockNetworkImage(false);
            //先加载文字在加载图片
            if (!webView.getSettings().getLoadsImagesAutomatically()) {
                webView.getSettings().setLoadsImagesAutomatically(true);
            }
            super.onPageFinished(view, url);
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_notedetail_toolsbar, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        return super.onOptionsItemSelected(item);
    }

    public void onScrollToTop() {
        if (!relativeLayout.isShown()) {
            relativeLayout.clearAnimation();
            relativeLayout.startAnimation(showAnim);
            relativeLayout.setVisibility(View.VISIBLE);
        }
    }

    public void onScrollToBottom() {
        if (relativeLayout.isShown()) {
            relativeLayout.clearAnimation();
            relativeLayout.startAnimation(dismissAnim);
            relativeLayout.setVisibility(View.GONE);
        }
    }
}