
//Librerias de JavaFX usadas
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
//----------------------------------
//Librerias de FreeTTS
import com.sun.speech.freetts.Voice;
import com.sun.speech.freetts.VoiceManager;
//----------------------------------------
//Librerias de Apache PDFBox
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
//-----------------------------------------
import java.io.File;
import java.io.IOException;

public class ConverPDFAudio extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws IOException {
        double num_i, num_f;// variables para ingresar paginas de inicio y fin no implementado

        primaryStage.setTitle("JavaFX App");

        FileChooser fileChooser = new FileChooser();

        Button button = new Button("Select File");//boton que abrira el seleccionador de archivos
        Button start = new Button("Speak");//boton para reproducir el texto

        TextField inicio = new TextField();//Textfield parael ingreso de pagina de inicio (no impementado)
        TextField fin = new TextField();//Textfield parael ingreso de pagina de fin de lectura (no impementado)


        button.setOnAction(e -> {
            File selectedFile = fileChooser.showOpenDialog(primaryStage);//se abre el seleccionador de archivos
            try {
                PDDocument document = Loader.loadPDF(selectedFile);//se almacena el PDF para usar con PDFBox
                PDFTextStripper pdfStripper = new PDFTextStripper();
                pdfStripper.setStartPage(1);//setea la primera pagina a leer
                //pdfStripper.setEndPage(7);//se setea la ultima pagina a leer
                pdfStripper.setEndPage(document.getNumberOfPages()); //setea el final del archivo
                String text = pdfStripper.getText(document);//se obtiene texto del documento PDF

                System.out.println(text);//Se imprime texto en consola

                start.setOnAction(a -> speak(text));// boton speak reproduce audio
            } catch (IOException ioException) {
                ioException.printStackTrace();
            }
        });

        VBox vBox = new VBox();
        HBox hbox = new HBox();
        //aqui se agregan las textfile no implementadas
        //vBox.getChildren().add(hbox);
        hbox.getChildren().addAll(new Label("inicial page"), inicio, new Label("Final page"), fin);//se agregan las los textfile a un hbox
        vBox.getChildren().add(button);//se agrega el boton select file
        vBox.getChildren().add(start);//se agrega el boton speak


        Scene scene = new Scene(vBox, 500, 100);

        primaryStage.setScene(scene);
        primaryStage.show();

    }
    public  void speak(String text){
        System.setProperty("freetts.voices", "com.sun.speech.freetts.en.us.cmu_us_kal.KevinVoiceDirectory");//se setea la ubicacion de la voz a usar
        Voice voz = VoiceManager.getInstance().getVoice("kevin16");// se setea la voz que leerá el texto
        if(voz != null) {
            voz.allocate();//asigna la voz
            boolean status = voz.speak(text);//reproduce la voz
            System.out.println("Status: "+status);//imprime el status al cierre
            voz.deallocate();//desasigna la voz
        }else{
            System.out.println("Error en obtener voz");
        }
    }


}
