/*
 * Created on 09-Jan-2006
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package net.mar;

import java.io.PrintWriter;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

import uk.ac.roe.wfau.FormatLines;
import uk.ac.roe.wfau.TextToLines;

/**
 * @author mar
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class ACSVWriter {
    static DateFormat timeFormatter =DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT,Locale.UK);
    static String eol="\n";
    
    public static String printHeader(ResultSetMetaData rsmd, String SQLQuery) {
        return printHeader(rsmd, SQLQuery, "");
    }
    public static String printHeader(ResultSetMetaData rsmd, String SQLQuery, String database){
        return printHeader(rsmd,SQLQuery,database,null);
    }
    public static String printHeader(ResultSetMetaData rsmd, String SQLQuery, String database, String [] comments) {
        StringBuffer columnHeader=new StringBuffer("# ");
        int noCols=0;
        try {
        noCols=rsmd.getColumnCount();
       
 
        
        if (noCols > 0) {
            for (int i=1; i <= noCols; i++) {
                if (!rsmd.getColumnName(i).equals("")) {
                columnHeader.append(rsmd.getColumnName(i));
                }
                else {
                    columnHeader.append("col"+i); 
                }
                if (i<noCols) {
                    columnHeader.append(",");
                }
            }
        }
        
        }
        catch (SQLException se) {
            
        }
        columnHeader.append(eol);
        
        StringBuffer sb=new StringBuffer(columnHeader+"#"+eol+"# Results of Query: Database "+database+" "+timeFormatter.format(new Date())+eol);
        FormatLines fl = new FormatLines(SQLQuery.replaceAll("\r?\n"," "),70);
        String tempString="";
        int nl=0;
        while (fl.startP >= 0 && nl < 200) {
            sb.append("# "+fl.getLine()+eol);
            nl++;
        }
        fl=null;
        /*
        noCols=0;
        try {
        noCols=rsmd.getColumnCount();
        
        
        sb.append("# ");
        if (noCols > 0) {
            for (int i=1; i <= noCols; i++) {
                tempString=rsmd.getColumnName(i);
                if (tempString.equals("")){
                    tempString="col"+i;
                }
                if (i == noCols) {
                    
                    sb.append(tempString);
                   
                }
                else {
                    sb.append(tempString+ ",");
                }
            }
        }
        }
    catch (SQLException se) {
        
    }
        sb.append(eol);
        */
        if (comments != null) {
            for (int j=0; j<comments.length;j++) {
                if (comments[j].length() < 78) {
                sb.append("# "+comments[j]+eol);
                }
                else {
                    String [] stA=TextToLines.getLineArray(comments[j],70);
                    if (stA != null) {
                        for (int k=0; k<stA.length; k++) {
                            sb.append("# "+stA[k]+eol);
                        }
                    }
                }
            }
        }
        sb.append("# Column Headers at start of file AND below"+eol+"#"+eol+columnHeader);
        return sb.toString();
        
    }

}
