package org.zhios.website.admin.model;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class PageEditor {
	public String HtmlTitle;
	public String HtmlBody;
	
	public PageEditor(){
		HtmlTitle="";
		HtmlBody="";
	}
	
	//Read Page's Content
	public void ReadPage(String filepath){
		if(filepath==null) return;

		try {
			File file=new File(filepath);
			if(file.exists()){
			    InputStreamReader ireader = new InputStreamReader(new FileInputStream(file),"UTF-8"); 
			    BufferedReader buffreader=new BufferedReader(ireader);
			    
			    String tempstr="",filestring="";
			    while((tempstr=buffreader.readLine())!=null){filestring+=tempstr+"\r\n";}
			    
			    if(!filestring.isEmpty()){
			    	//read title
			    	int titlestart=filestring.indexOf("<title>")+7;
			    	int titleend=filestring.indexOf("</title>");
			    	HtmlTitle=filestring.substring(titlestart, titleend);
			    	
			    	//read content
					int contentstart=filestring.indexOf(">",filestring.indexOf("<body"))+1;
					int contentend=filestring.indexOf("</body>");
					HtmlBody=filestring.substring(contentstart, contentend);
				}
			    buffreader.close();
			    ireader.close();
			}
		}
		catch (Exception e) {
			e.printStackTrace();
		}
	}

	//Write Page's Content
	public boolean WritePage(String filepath, String htmltitle, String htmlbody){
		if(filepath==null) return false;

		boolean writesucceed=false;
		try {			
			File file=new File(filepath);
			if(file.exists()){
				//Get file content
				InputStreamReader ireader = new InputStreamReader(new FileInputStream(file),"UTF-8"); 
				BufferedReader buffreader=new BufferedReader(ireader);
				String tempstr="",filestring="";
			    while((tempstr=buffreader.readLine())!=null){filestring+=tempstr+"\r\n";}

			    String writestring="";
			    //Get Header and Tail
			    if(!filestring.isEmpty()){
			    	int titlestart=filestring.indexOf("<title>")+7;
			    	int titleend=filestring.indexOf("</title>");
				    int contentstart=filestring.indexOf(">",filestring.indexOf("<body"))+1;
					int contentend=filestring.indexOf("</body>");
					writestring=filestring.substring(0,titlestart);
					writestring+=htmltitle;
					writestring+=filestring.substring(titleend,contentstart);
					writestring+="\r\n";
					writestring+=htmlbody;
					writestring+="\r\n";
					writestring+=filestring.substring(contentend);
			    }
			    buffreader.close();
			    ireader.close();
			    
			    //Write into file.
			    if(!writestring.isEmpty()){
				    OutputStreamWriter owriter = new OutputStreamWriter(new FileOutputStream(file),"UTF-8"); 
				    BufferedWriter buffwriter=new BufferedWriter(owriter);
				    buffwriter.write(writestring);
				    buffwriter.flush();
				    
				    buffwriter.close();
				    owriter.close();
			    }
			    
				writesucceed=true;
			}
		}
		catch (Exception e) {
			e.printStackTrace();
		}

		return writesucceed;
	}


	//Update News Package List, used in this page.
	public boolean UpdatePackageRecord(String pagename, String htmlbody){
		if(pagename==null) return false;
		
		String filepath=SysConfig.RootPath+"/package/package.xml";
		
		ConfFileOpt conffile=new ConfFileOpt(filepath);

		boolean ifsucceed=false;
		try {
			if(!conffile.deleteNodeByName(pagename)) return false;
			
			int btmpackage=-1,etmpackage=-1;
			String packagename="",tempstr="";
			while((btmpackage=htmlbody.indexOf("tmpackage:"))>=0){
				htmlbody=htmlbody.substring(btmpackage+"tmpackage:".length());
				
				tempstr=htmlbody.substring(0,htmlbody.indexOf(">"));
				etmpackage=tempstr.indexOf(";");
				if(etmpackage<0) etmpackage=tempstr.indexOf("\"");
				if(etmpackage<0) etmpackage=tempstr.indexOf("'");
				if(etmpackage>=0){
					packagename=tempstr.substring(0,etmpackage).trim();
					if(!packagename.isEmpty()){
						String nodeid=packagename+"_"+pagename;
						if(!(conffile.isNodeExist(nodeid)))
							conffile.addNode(packagename, "page", nodeid, pagename);
					}
				}
			}
			ifsucceed=true;
		}
		catch (Exception e) {
			e.printStackTrace();
		}

		return ifsucceed;
	}

	
}
