package com.xuxin.mychat;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import android.util.Log;

public class HttpDownloader {
	private URL url = null;

	/**
	 * 根据URL下载文件，前提是这个文件当中的内容是文本，函数的返回值就是文件当中的内容 1.创建一个URL对象
	 * 2.通过URL对象，创建一个HttpURLConnection对象 3.得到InputStram 4.从InputStream当中读取数据
	 * 
	 * @param urlStr
	 * @return
	 */
	public String download(String urlStr) {
		StringBuffer sb = new StringBuffer();
		String line = null;
		BufferedReader buffer = null;
		try {
			// 创建一个URL对象
			url = new URL(urlStr);
			// 创建一个Http连接
			HttpURLConnection urlConn = (HttpURLConnection) url
					.openConnection();
			// 使用IO流读取数据
			buffer = new BufferedReader(new InputStreamReader(
					urlConn.getInputStream()));
			while ((line = buffer.readLine()) != null) {
				sb.append(line);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				buffer.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return sb.toString();
	}

	/**
	 * 返回整形 -1：下载文件出错 返回0：代表下载文件成功 返回1：代表文件已经存在
	 */
	public int downFile(String urlStr, String param, String path,
			String fileName) {
		InputStream inputStream = null;
		try {
			FileUtils fileUtils = new FileUtils();

			if (fileUtils.isFileExist(path + fileName)) {
				return 1;
			} else {
				Log.i("down load url ", urlStr);
				inputStream = getInputStreamFromUrl(urlStr, param);
				File resultFile = fileUtils.write2SDFromInput(path, fileName,
						inputStream);
				if (resultFile == null) {
					return -1;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
			return -1;
		} finally {
			try {
				inputStream.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return 0;
	}

	/**
	 * 根据URL得到输入流
	 * 
	 * @param urlStr
	 * @return
	 * @throws MalformedURLException
	 * @throws IOException
	 */
	public InputStream getInputStreamFromUrl(String urlStr, String param) {
		InputStream inputStream = null;
		HttpURLConnection urlConn = null;

		try {
			url = new URL(urlStr);
			urlConn = (HttpURLConnection) url.openConnection();
			urlConn.setRequestMethod("POST");// 提交模式
			urlConn.setDoOutput(true);// 是否输入参数
			byte[] bypes = param.toString().getBytes();
			urlConn.getOutputStream().write(bypes);// 输入参数

			inputStream = urlConn.getInputStream();
			return inputStream;
		} catch (Exception e) {
			e.printStackTrace();
		}

		return inputStream;

	}

	/**
	 * -1 失败；0成功率；1 已存在
	 * 
	 * @param fileUrl
	 * @param params
	 * @param fileName
	 * @return
	 */
	public int httpClientDown(String fileUrl, List<BasicNameValuePair> params,
			String fileName) {

		int flag = -1;

		FileUtils fileUtils = new FileUtils();

		HttpClient httpClient = new DefaultHttpClient();
		HttpPost httpPost = new HttpPost(fileUrl);

		try {

			if (fileUtils.isFileExist(fileName)) {
				return 1;
			} else {
				httpPost.setEntity(new UrlEncodedFormEntity(params, "utf-8"));

				HttpResponse response = httpClient.execute(httpPost);

				if (response.getStatusLine().getStatusCode() == 200) {
					byte[] result = EntityUtils.toByteArray(response
							.getEntity());
					flag = fileUtils.saveFileToSdk(result, fileName);
				}

			}

		} catch (Exception e) {
			e.printStackTrace();
		}

		return flag;

	}
}
