package com.softgraf.model;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

import com.softgraf.model.abstrato.BDproperties;

// 07
final public class FinanceiroProperties implements BDproperties {

	private String arqConfig;
	private Properties tabela;
	
	// arquivo de configuração financeiro.properties
	public FinanceiroProperties(String arqConfig) throws IOException {
		this.arqConfig = arqConfig;
		 // instancia um Hashtable persistente
		this.tabela = new Properties(); 
		
		if (new File(arqConfig).exists())
			 // le propriedades do arquivo para a tabela
			lerPropriedades();
		else {
			definirPadrao();      // cria dados padrões
			salvarPropriedades(); // salva dados na tabela
		}
	}

	@Override
	public String getClasse() {
		return tabela.getProperty("classe");
	}

	@Override
	public String getDriver() {
		return tabela.getProperty("driver");
	}

	@Override
	public String getUrl() {
		return tabela.getProperty("url");
	}

	@Override
	public String getBanco() {
		return tabela.getProperty("banco");
	}

	@Override
	public String getusuario() {
		return tabela.getProperty("usuario");
	}

	@Override
	public String getSenha() {
		return tabela.getProperty("senha");
	}

	// retorna "jdbc:mysql://localhost:3306/financeiro"
	@Override
	public String getStringConexao() {
		return "jdbc:" + getDriver() + "://" + getUrl() + "/" + getBanco();
	}

	// define o conteúdo padrão da tabela
	private void definirPadrao() {
		tabela.setProperty("classe", "com.mysql.jdbc.Driver");
		tabela.setProperty("driver", "mysql");
		tabela.setProperty("url", "localhost:3306"); //ip:porta
		tabela.setProperty("banco", "financeiro?createDatabaseIfNotExist=true");
		tabela.setProperty("usuario", "root");
		tabela.setProperty("senha", "softgraf");		
	}

	// salva o conteúdo da tabela no arquivo financeiro.properties
	private void salvarPropriedades() throws IOException {
		FileOutputStream saida = new FileOutputStream(arqConfig);
		tabela.store(saida, "Configuração do Banco de Dados Financeiro");
		saida.close();
	}

	// le conteúdo da tabela a partir de financeiro.properties
	private void lerPropriedades() throws IOException {
		FileInputStream entrada = new FileInputStream(arqConfig);
		tabela.load(entrada);
		entrada.close();
	}

}
