package dataWarehousingTools;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

//    This class sends messages to stdout rather than the log file, because the log file
//    cannot be used until this class has loaded the logfile location.

public class Configuration 
{
    private int    configurationId;
    private String configurationName;
    private String htmlFileLocation;
    private String logFileLocation;
    private String csvFileLocation;
    private String queryFileLocation;
    private String groupSummaryName;
    private String groupPrefix;
    private String dataTablePrefix;
    private String chartPrefix;
    private String linkToStylesheets;
    private String linkToKpiImages;
    private int    chartThumbnailWidth;
    private int    chartThumbnailHeight;
    private String linkToIssueTrackingNew;
    private String kpiImageType;

    private Connection connection;
    
    public Configuration(String configurationName, Connection connection)
    {
        
        Statement selectConfigurationStatement = null;
        ResultSet configurationResultSet = null;
        boolean configurationFound = false;
        
        this.configurationName = configurationName;
        this.connection = connection;
        
        try
        {
            selectConfigurationStatement = connection.createStatement();
        }
        catch(SQLException sqle)
        {
            System.out.println(sqle);
        }

        try
        {
            configurationResultSet = selectConfigurationStatement.executeQuery
            (
                "select " +
                    "id, " +
                    "html_file_location, " +
                    "log_file_location, " +
                    "csv_file_location, " +
                    "query_file_location, " +
                    "group_summary_name, " +
                    "group_prefix, " +
                    "data_table_prefix, " +
                    "chart_prefix, " +
                    "link_to_stylesheets, " +
                    "link_to_kpi_images, " +
                    "chart_thumbnail_width, " +
                    "chart_thumbnail_height, " +
                    "link_to_issue_tracking_new, " +
                    "kpi_image_type " +
                "from " +
                    "configuration " +
                "where " +
                    "configuration_name = '" + configurationName + "'"
            );

        }
        catch(SQLException sqle)
        {
            System.out.println(sqle);
        }
        
        try
        {
            configurationFound = configurationResultSet.next();
        } 
        catch (SQLException e)
        {
            e.printStackTrace();
        }
        
        if (configurationFound)
        {
            try
            {
                configurationId = configurationResultSet.getInt("id");
                htmlFileLocation = new String(configurationResultSet.getString("html_file_location"));
                logFileLocation = new String(configurationResultSet.getString("log_file_location"));
                csvFileLocation = new String(configurationResultSet.getString("csv_file_location"));
                queryFileLocation = new String(configurationResultSet.getString("query_file_location"));
                groupSummaryName = new String(configurationResultSet.getString("group_summary_name"));
                groupPrefix = new String(configurationResultSet.getString("group_prefix"));
                dataTablePrefix = new String(configurationResultSet.getString("data_table_prefix"));
                chartPrefix = new String(configurationResultSet.getString("chart_prefix"));
                linkToStylesheets = new String(configurationResultSet.getString("link_to_stylesheets"));
                linkToKpiImages = new String(configurationResultSet.getString("link_to_kpi_images"));
                chartThumbnailWidth = configurationResultSet.getInt("chart_thumbnail_width");
                chartThumbnailHeight = configurationResultSet.getInt("chart_thumbnail_height");
                linkToIssueTrackingNew = configurationResultSet.getString("link_to_issue_tracking_new");
                kpiImageType = new String(configurationResultSet.getString("kpi_image_type"));
            } 
            catch (SQLException e)
            {
                e.printStackTrace();
            }
        }
        try 
        {
            selectConfigurationStatement.close();
        } 
        catch (SQLException e) 
        {
            e.printStackTrace();
        }
    }
    
    public Configuration(String configurationName, Connection connection, boolean profileOnly)
    {
        
        Statement selectConfigurationStatement = null;
        ResultSet configurationResultSet = null;
        boolean configurationFound = false;
        
        this.configurationName = configurationName;
        this.connection = connection;
        
        try
        {
            selectConfigurationStatement = connection.createStatement();
        }
        catch(SQLException sqle)
        {
            System.out.println(sqle);
        }

        try
        {
            configurationResultSet = selectConfigurationStatement.executeQuery
            (
                "select " +
                        "id, " +
                        "html_file_location, " +
                        "log_file_location, " +
                        "csv_file_location, " +
                        "query_file_location, " +
                        "group_summary_name, " +
                        "group_prefix, " +
                        "data_table_prefix, " +
                        "chart_prefix, " +
                        "link_to_stylesheets, " +
                        "link_to_kpi_images, " +
                        "chart_thumbnail_width, " +
                        "chart_thumbnail_height, " +
                        "link_to_issue_tracking_new, " +
                        "kpi_image_type " +
                    "from " +
                        "configuration " +
                    "where " +
                        "configuration_name = '" + configurationName + "'"
            );

        }
        catch(SQLException sqle)
        {
            System.out.println(sqle);
        }
        
        try
        {
            configurationFound = configurationResultSet.next();
        } 
        catch (SQLException e)
        {
            e.printStackTrace();
        }
        
        if (configurationFound)
        {
        	if (profileOnly)
        	{
                try 
                {
					configurationId = configurationResultSet.getInt("id");
	                logFileLocation = new String(configurationResultSet.getString("log_file_location"));
	                csvFileLocation = new String(configurationResultSet.getString("csv_file_location"));
				} 
                catch (SQLException e) 
                {
					e.printStackTrace();
				}
        	}
        	else
        	{
	            try
	            {
	                configurationId = configurationResultSet.getInt("id");
	                htmlFileLocation = new String(configurationResultSet.getString("html_file_location"));
	                logFileLocation = new String(configurationResultSet.getString("log_file_location"));
	                csvFileLocation = new String(configurationResultSet.getString("csv_file_location"));
	                queryFileLocation = new String(configurationResultSet.getString("query_file_location"));
	                groupSummaryName = new String(configurationResultSet.getString("group_summary_name"));
	                groupPrefix = new String(configurationResultSet.getString("group_prefix"));
	                dataTablePrefix = new String(configurationResultSet.getString("data_table_prefix"));
	                chartPrefix = new String(configurationResultSet.getString("chart_prefix"));
	                linkToStylesheets = new String(configurationResultSet.getString("link_to_stylesheets"));
	                linkToKpiImages = new String(configurationResultSet.getString("link_to_kpi_images"));
	                chartThumbnailWidth = configurationResultSet.getInt("chart_thumbnail_width");
	                chartThumbnailHeight = configurationResultSet.getInt("chart_thumbnail_height");
	                linkToIssueTrackingNew = configurationResultSet.getString("link_to_issue_tracking_new");
	                kpiImageType = new String(configurationResultSet.getString("kpi_image_type"));
	            } 
	            catch (SQLException e)
	            {
	                e.printStackTrace();
	            }
        	}
        }

        try 
        {
            selectConfigurationStatement.close();
        } 
        catch (SQLException e) 
        {
            e.printStackTrace();
        }
    }


    public String getCsvFileLocation() 
    {
		return csvFileLocation;
	}

	public String getChartPrefix() 
    {
        return chartPrefix;
    }

    public String getDataTablePrefix() 
    {
        return dataTablePrefix;
    }

    public String getGroupPrefix() 
    {
        return groupPrefix;
    }

    public String getGroupSummaryName() 
    {
        return groupSummaryName;
    }

    public int getConfigurationId() 
    {
        return configurationId;
    }

    public String getConfigurationName() {
        return configurationName;
    }

    public int getChartThumbnailHeight()
    {
        return chartThumbnailHeight;
    }

    public int getChartThumbnailWidth()
    {
        return chartThumbnailWidth;
    }

    public Connection getConnection()
    {
        return connection;
    }

    public String getKpiImageType()
    {
        return kpiImageType;
    }


    public String getLinkToStylesheets()
    {
        return linkToStylesheets;
    }

    public String getLinkToIssueTrackingNew()
    {
        return linkToIssueTrackingNew;
    }

    public String getLinkToKpiImages()
    {
        return linkToKpiImages;
    }

    public String getLogFileLocation()
    {
        return logFileLocation;
    }

    public String getHtmlFileLocation()
    {
        return htmlFileLocation;
    }
    
    public String getQueryFileLocation() 
    {
        return queryFileLocation;
    }

    public void setQueryFileLocation(String queryFileLocation) 
    {
        this.queryFileLocation = queryFileLocation;
    }
}