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

import com.evolute.siprp.client.vo.Utilizador;
import com.evolute.siprp.server.db.InitDB;
import com.evolute.siprp.server.db.data.siprp.UtilizadoresData;
import com.evolute.utils.Singleton;
import com.evolute.utils.arrays.Virtual2DArray;
import com.evolute.utils.db.DBManager;
import com.evolute.utils.db.Executer;
import com.evolute.utils.jdo.JDOProvider;
import com.evolute.utils.sql.Expression;
import com.evolute.utils.sql.Field;
import com.evolute.utils.sql.Select;
import com.evolute.utils.sql.Select2;

public class LoginDataProvider 
{

	private static LoginDataProvider instance = null;
	
	private final Executer EXECUTER;
	private final JDOProvider JDO_PROVIDER;
	
	
	private LoginDataProvider() throws Exception
	{
		System.out.println( "-- InitDB.init()" );
		InitDB.init();
		
		DBManager dbm = ( DBManager ) Singleton.getInstance( Singleton.DEFAULT_DBMANAGER );
		EXECUTER = dbm.getSharedExecuter( this );
		JDO_PROVIDER = ( JDOProvider ) Singleton.getInstance( Singleton.DEFAULT_JDO_PROVIDER );
	}
	
	
	public static LoginDataProvider getProvider() throws Exception
	{
		if ( instance == null )
		{
			instance = new LoginDataProvider();
		}
		return instance;
	}
	
	
	public Utilizador loadUtilizadorByID( Integer userID )
		throws Exception
	{
		Utilizador user = null;
		
		UtilizadoresData usersData = JDO_PROVIDER.load( UtilizadoresData.class, userID );
		if ( usersData != null )
		{
			user = new Utilizador();
			user.setUserID( usersData.getId() );
			user.setUsername( usersData.getLogin() );
			user.setEmail( usersData.getEmail() );
			user.setNome( usersData.getNome() );
			user.setData_password( usersData.getData_password() );
			user.setPrimeiro_login( usersData.getPrimeiro_login().equals( "y" ) );
			user.setTipo_utilizador( usersData.getTipo() );
			user.setResponsavel_loja( usersData.getResponsavel_loja().equals( "y" ) );
			user.setEstabelecimento_id( usersData.getEstabelecimento_id() );
		}
		
		return user;
	}
	
	/**
	 * 
	 * @param username
	 * @param password
	 * @return id, login, email, tipo, nome, primeiro_login, data_password
	 * @throws Exception
	 */
	public Virtual2DArray getUtilizador( String username, String password ) throws Exception
	{
		//id, login, email, tipo, nome, primeiro_login, data_password
		
		Select query = new Select2(
			new String[] { UtilizadoresData.TABLENAME },
			new Integer[] {},
			new Expression[] {},
			new String[] { 
				UtilizadoresData.ID_FULL, UtilizadoresData.LOGIN_FULL, UtilizadoresData.EMAIL_FULL, 
				UtilizadoresData.TIPO_FULL, UtilizadoresData.NOME_FULL, UtilizadoresData.PRIMEIRO_LOGIN_FULL,
				UtilizadoresData.DATA_PASSWORD_FULL, UtilizadoresData.RESPONSAVEL_LOJA_FULL, UtilizadoresData.ESTABELECIMENTO_ID_FULL
			},
			new Field( UtilizadoresData.LOGIN_FULL ).isEqual( username ).and(
				new Field( UtilizadoresData.PASSWORD_FULL ).isEqual( password )
			),
			null,
			null,
			null,
			null
		);
		
		return EXECUTER.executeQuery( query );
	}
}
