package com.softgraf.vendas.model.bkup;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;

import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;

public class Mysqldump extends Thread {

	private String database, usuario, senha, arquivoSql, mysqldump;
	private boolean sucesso = false;

	public Mysqldump(String database, String usuario, String senha, String arquivoSql, String mysqldump) {
		this.database = database;
		this.usuario = usuario;
		this.senha = senha;
		this.arquivoSql = arquivoSql;
		this.mysqldump = mysqldump;
	}

	@Override
	public void run() {

		try {
			String[] cmdarray = new String[4];
			cmdarray[0] = mysqldump;
			cmdarray[1] = "-u" + usuario;
			cmdarray[2] = "-p" + senha;
			cmdarray[3] = database;

			Process processo = Runtime.getRuntime().exec(cmdarray);
			BufferedReader entrada = new BufferedReader(new InputStreamReader(processo.getInputStream()));
			BufferedWriter saida = new BufferedWriter(new FileWriter(arquivoSql));
			String linha;

			while ((linha = entrada.readLine()) != null) {
				saida.write(linha);
				saida.newLine();
				// dá chance de outro processo ser executado
				Thread.sleep(10);
			}
			entrada.close();
			saida.close();

			sucesso = (processo.exitValue() == 0);

		} catch (IOException | InterruptedException e) {
			sucesso = false;
			e.printStackTrace();
		}

	}

	// retorna o caminho do mysqldump.exe no windows ou mysqldump no linux
	public static String procurarMysqldump() {

		// Windows
		if (System.getProperty("os.name").toLowerCase().contains("windows")) {

			JFileChooser chooser = new JFileChooser();
			FileNameExtensionFilter filtro = new FileNameExtensionFilter("MysqlDump.exe", "exe");
			chooser.addChoosableFileFilter(filtro);
			chooser.setDialogTitle("Procure o programa MysqlDump.exe");
			chooser.showOpenDialog(null);
			File arquivo = chooser.getSelectedFile();
			return arquivo != null ? arquivo.getPath() : null;
	    // Linux
		} else { 
			return "mysqldump";
		}
	}

	public boolean getSucesso() {
		return sucesso;
	}
}
