package dataQualityWebSite;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.LinkedList;
import java.util.ListIterator;

public class GroupFactorList extends LinkedList<Integer>
{
	private static final long serialVersionUID = 1L;
	private Statement selectGroupFactorMapStatement;
	private ResultSet groupFactorMapResultSet;
	private boolean factorFound;

	public GroupFactorList(GroupElement groupElement, FactorList factorList, Connection connection)
	{
		int groupId;
		int factorId;
		ListIterator<FactorElement> iterator;
		FactorElement factorElement;
		int redCount;
		int amberCount;
		int greenCount;
		int greyCount;

		
		groupId = groupElement.getGroupId();
		
		try
		{
			selectGroupFactorMapStatement = connection.createStatement();
		}
		catch(SQLException sqle)
		{
			System.out.println(sqle);
		}

		try
		{
			groupFactorMapResultSet = selectGroupFactorMapStatement.executeQuery
			(
				"select " +
					"factor_id " +
				"from " +
					"group_factor_map " +
				"where " +
				    "factor_group_id = " + groupId +
				"order by " +
					"factor_sequence"
			);
		}
		catch(SQLException sqle)
		{
			System.out.println(sqle);
		}

		factorFound = true;
		redCount = 0;
		amberCount = 0;
		greenCount = 0;
		greyCount = 0;
		
		while(factorFound)
		{
			try
			{
				factorFound = groupFactorMapResultSet.next();
			} 
			catch (SQLException e)
			{
				e.printStackTrace();
			}
			
			if (factorFound)
			{
				try
				{
					factorId = groupFactorMapResultSet.getInt("factor_id");
 					this.add(factorId);
 					
 					for (iterator = factorList.listIterator(); iterator.hasNext(); )
 					{
 						factorElement = (FactorElement) iterator.next();
 						if(factorElement.getFactorId() == factorId)
						{
 							if (factorElement.getFactorStatus().equals("red"))
 								redCount++;
 							else if (factorElement.getFactorStatus().equals("amber"))
 								amberCount++;
 							else if (factorElement.getFactorStatus().equals("green"))
 								greenCount++;
 							else 
 								greyCount++;
 							break;
						}
 					}
				} 
				catch (SQLException e)
				{
					e.printStackTrace();
				}
			}
		}

		try 
		{
			selectGroupFactorMapStatement.close();
		} 
		catch (SQLException e) 
		{
			e.printStackTrace();
		}
		
		groupElement.setRedCount(redCount);
		groupElement.setAmberCount(amberCount);
		groupElement.setGreenCount(greenCount);
		groupElement.setGreyCount(greyCount);
	}
}
