package com.evolute.siprp.server.logic.AnaliseAcidentesTrabalho;

import java.util.Date;
import java.util.Vector;

import com.evolute.siprp.client.panels.apps.AnaliseAcidentesTrabalho.AnaliseAcidentesTrabalhoService;
import com.evolute.siprp.client.panels.utils.AppConstants;
import com.evolute.siprp.client.panels.utils.permissoes.RolesConstants;
import com.evolute.siprp.client.vo.ActualTableRow;
import com.evolute.siprp.client.vo.Utilizador;
import com.evolute.siprp.server.logic.AnaliseAcidentesTrabalho.actual.ActualTableDataProvider;
import com.evolute.siprp.server.logic.AnaliseAcidentesTrabalho.seguimento.SeguimentoTableDataProvider;
import com.evolute.utils.arrays.Virtual2DArray;

public class AnaliseAcidentesTrabalhoLogic implements AnaliseAcidentesTrabalhoService
{

	private ActualTableDataProvider actualProvider = null;
	private SeguimentoTableDataProvider seguimentoProvider = null;
	
	
	public AnaliseAcidentesTrabalhoLogic()
	{
		try
		{
			actualProvider = ActualTableDataProvider.getProvider();
			seguimentoProvider = SeguimentoTableDataProvider.getProvider();
		}
		catch ( Exception e )
		{
			e.printStackTrace();
		}
	}

	
    public String getFase( int estado )
    {
    	String fase = null;
    	
    	if ( estado == AppConstants.ESTADO_SEG )
    	{
    		fase = "FASE 1 - SEG - ABERTURA";
    	}
    	else if ( estado == AppConstants.ESTADO_RH1 )
    	{
    		fase = "FASE 2 - RH - ACOMPANHAMENTO";
    	}
    	else if ( estado == AppConstants.ESTADO_HS )
    	{
    		fase = "FASE 3 - SIPRP - RECOMENDA\u00C7\u00D5ES";
    	}
    	else if ( estado == AppConstants.ESTADO_RH2 )
    	{
    		fase = "FASE 4 - RH - MEDIDAS + LES\u00C3O";
    	}
    	else if ( estado == AppConstants.ESTADO_CONSOLIDACAO )
    	{
    		fase = "FASE 5 - SIPRP - CONSOLIDA\u00C7\u00C3O";
    	}
    	else if ( estado == AppConstants.ESTADO_ASSINATURA_SEG )
    	{
    		fase = "FASE 6 - SEG - VERIFICA\u00C7\u00C3O SEG.";
    	}
    	else if ( estado == AppConstants.ESTADO_ASSINATURA_RH )
    	{
    		fase = "FASE 7 - RH - VERIFICA\u00C7\u00C3O RH";
    	}
    	else if ( estado == AppConstants.ESTADO_FECHAR )
    	{
    		fase = "FASE 8 - SIPRP - CONCLUS\u00C3O";
    	}
    	
    	return fase;
    }
    
    
	@Override
	public Vector< ActualTableRow > getActualTableData( Utilizador userLogged ) 
	{
		Vector< ActualTableRow > result = null;
		
		try
		{
			int userType = userLogged.getTipo_utilizador().intValue();
			Virtual2DArray array = null;
			
			if ( userType == RolesConstants.TIPO_SEGURANCA )
			{
				array = actualProvider.getAnalisesActuaisSeguranca( userLogged.getEstabelecimento_id(), userLogged.getResponsavel_loja() );
			}
			else if ( userType == RolesConstants.TIPO_RECURSOS_HUMANOS )
			{
				array = actualProvider.getAnalisesActuaisRH( userLogged.getEstabelecimento_id(), userLogged.getResponsavel_loja() );
			}
			else if ( userType == RolesConstants.TIPO_HIGIENE_SEGURANCA )
			{
				array = actualProvider.getAnalisesActuaisHS();
			}
			
			result = fillVector( array );
		}
		catch ( Exception e )
		{
			e.printStackTrace();
		}
		
		return result;
	}
	

	@Override
	public Vector< ActualTableRow > getSeguimentoTableData( Utilizador userLogged ) 
	{
		Vector< ActualTableRow > result = null;
		
		try 
		{
			int userType = userLogged.getTipo_utilizador().intValue();
			Virtual2DArray array = null;
			
			if ( userType == RolesConstants.TIPO_DIRECTOR_GERAL_RECURSOS_HUMANOS 
				|| userType == RolesConstants.TIPO_DIRECTOR_SIPRP )
			{
				array = seguimentoProvider.getAnalisesSeguimento_DirGeralRH();
			}
			else if ( userType == RolesConstants.TIPO_GESTOR )
			{
				if ( userLogged.getEstabelecimento_id() == null )
				{
					array = seguimentoProvider.getAnalisesSeguimento_DirGeralRH();
				}
				else
				{
					array = seguimentoProvider.getAnalisesSeguimentoByEstabelecimentoID( userLogged.getEstabelecimento_id() );
				}
			}
			else if ( userType == RolesConstants.TIPO_HIGIENE_SEGURANCA )
			{
				array = seguimentoProvider.getAnalisesSeguimento_HS();
			}
			
			result = fillVector( array );
		}
		catch ( Exception e )
		{
			e.printStackTrace();
		}
		
		return result;
	}
	
	
	/**
	 * fills vector with 'actual' or 'seguimento' data ...
	 *  
	 * @param array
	 * @return
	 */
	private Vector< ActualTableRow > fillVector( Virtual2DArray array )
	{
		Vector< ActualTableRow > result = null;
		
		if ( array != null )
		{
			result = new Vector< ActualTableRow >();
			for ( int i = 0; i < array.columnLength(); i++ )
			{
				Integer anaID = ( Integer ) array.get( i, 0 );
				Date dataAcidente = ( Date ) array.get( i, 1 );
				Date dataAbertura = ( Date ) array.get( i, 2 );
				String analiseNr = ( String ) array.get( i, 3 );
				String nrPOR = ( String ) array.get( i, 4 );
				String nomeTrabalhador = ( String ) array.get( i, 5 );
				Integer estado = ( Integer ) array.get( i, 6 );
				
				ActualTableRow row = new ActualTableRow();
				row.setId( anaID );
				row.setDataAcidente( dataAcidente );
				row.setDataAbertura( dataAbertura );
				row.setNrAcidente( analiseNr );
				row.setPOR( nrPOR );
				row.setNomeAcidentado( nomeTrabalhador );
				row.setEstado( estado );
				row.setFase( getFase( estado ) );
				
				result.add( row );
			}
		}
		
		return result;
	}
	
}
