package com.mob.bbssdk.sample.viewer;

import android.content.Context;
import android.content.res.Resources;
import android.net.http.SslError;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.view.View;
import android.webkit.SslErrorHandler;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;

import com.mob.bbssdk.gui.pages.forum.PageAttachmentViewer;
import com.mob.bbssdk.gui.webview.BaseWebView;
import com.mob.bbssdk.sample.utils.OfficeConverter;
import com.mob.tools.utils.Data;
import com.mob.tools.utils.ResHelper;
import com.mob.tools.utils.UIHandler;

import java.io.File;

/**
 * 打开Office文件
 */
public class PageOfficeViewer extends PageAttachmentViewer {
	private WebView webView;
	private ProgressBar progressBar;
	private String htmlPath;

	protected View initViewerContentView(Context context) {
		Resources resources = context.getResources();
		RelativeLayout rl = new RelativeLayout(context);

		webView = new BaseWebView(context);
		webView.setWebViewClient(new WebViewClient() {
			public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
				handler.proceed();
			}
		});
		webView.setWebChromeClient(new WebChromeClient() {
			public void onProgressChanged(WebView view, int newProgress) {
				progressBar.setProgress(newProgress);
				if (newProgress == 100) {
					progressBar.setVisibility(View.GONE);
				} else if (progressBar.getVisibility() == View.GONE) {
					progressBar.setVisibility(View.VISIBLE);
				}
				super.onProgressChanged(view, newProgress);
			}
		});
		rl.addView(webView, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);

		progressBar = new ProgressBar(context, null, android.R.attr.progressBarStyleHorizontal);
		progressBar.setIndeterminate(false);
		progressBar.setMax(100);
		progressBar.setProgressDrawable(resources.getDrawable(ResHelper.getBitmapRes(context, "bbs_webview_progressbar_bg")));
		rl.addView(progressBar, LinearLayout.LayoutParams.MATCH_PARENT, ResHelper.dipToPx(context, 2));
		return rl;
	}

	protected void loadContent(final String filePath, final String extension, final LoadContentListener loadContentListener) {
		htmlPath = null;
		//2. 将文件转成html
		String tmpPath = ResHelper.getCachePath(getContext(), "attachment/html");
		final String fileMd5 = Data.MD5(filePath);
		String htmlName = fileMd5 + ".html";
		final File htmlFile = new File(tmpPath, htmlName);
		htmlPath = htmlFile.getAbsolutePath();
		if (htmlFile.exists()) {
			//如果已经转换过了,则直接使用webview打开html
			webView.loadUrl("file:///" + htmlPath);
			loadContentListener.onLoadFinished(true);
		} else {
			//如果没有转换,则起线程开始转换
			new Thread() {
				public void run() {
					try {
						String imagePath = ResHelper.getCachePath(getContext(), "attachment/html/img/" + fileMd5);
						OfficeConverter converter = new OfficeConverter(filePath, extension, htmlPath, imagePath);
						converter.convertToHtml();
					} catch (Throwable t) {
						htmlFile.delete();
						t.printStackTrace();
					}
					new UIHandler().sendEmptyMessage(0, new Handler.Callback() {
						public boolean handleMessage(Message msg) {
							if (!TextUtils.isEmpty(htmlPath) && new File(htmlPath).exists()) {
								//转换成功,则使用webview打开html
								webView.loadUrl("file:///" + htmlPath);
								loadContentListener.onLoadFinished(true);
							} else {
								loadContentListener.onLoadFinished(false);
							}
							return false;
						}
					});
				}
			}.start();
		}
	}
}