#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import subprocess
import argparse
import os
import sys
import importlib  
dadaist2 = importlib.import_module("dadaist2-console")

dadaist2.printBox("dadaist2-phyloseqMake " + dadaist2.getVersion())
if __name__ == "__main__":
    args = argparse.ArgumentParser()
    currentDirectory = os.getcwd()
    defaultOutput = os.path.join(currentDirectory, "phyloseq.rds")
    args.add_argument("-i", "--input", help="Input directory")
    args.add_argument("-o", "--output", help="Output directory")
    args.add_argument("--verbose", help="Verbose output", action="store_true")
    args.add_argument("--version", help="Print version", action="store_true")
    args = args.parse_args()

    if args.version:
        dadaist2.console.print("dadaist2-phyloseqMake", dadaist2.getVersion(), highlight=False)
    else:
        # Check input dir: not required as version can be specified
        if args.input is None:
            print("ERROR: Input directory is required (-i, --input)")
            sys.exit(1)

    # Output object: default is inside the input directory
    outputObject = os.path.join(args.input, "phyloseq.rds")
    
    if args.output is None:
        outputDestination = None
    else:
        outputDestination = os.path.abspath( args.output )

    # Check script
    rScript = os.path.join(dadaist2.selfDir, "D2-importPhyloseq.R")
    if not os.path.isfile(rScript):
        print("ERROR: R script not found: " + rScript)
        sys.exit(1)

    # Create Dadaist output object
    dadaistDir = dadaist2.DadaistOutputDir(args.input, verbose=args.verbose)
    dadaistDir.print()
    
    if not dadaistDir.valid:
        print("ERROR: Input directory is not valid and cannot be processed")
        sys.exit(1)
    if not dadaistDir.has_analyst:
        print("ERROR: Input directory does not have a MicrobiomeAnalyst directory")
        sys.exit(1)
    else:
        dadaist2.console.log(f"Input directory \"[cyan]{args.input}[/cyan]\" created with [bold]Dadaist2 {dadaistDir.version}[/bold]", highlight=False)
        dadaist2.console.log(f"MicrobiomeAnalyst directory found: {dadaistDir.analyst}", highlight=False)
    # Command: Rscript --vanilla --no-save $rScript "$opt_inputdir"
    cmd = ["Rscript", "--vanilla", "--no-save", rScript, args.input]
    
    # Run R script capturing stdout and stderr
    try:
        output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
        dadaist2.console.log("Finished running R script", highlight=False)
    except subprocess.CalledProcessError as e:
        print("ERROR: R script failed with exit code " + str(e.returncode))
        print(e.output.decode("utf-8"))
        sys.exit(1)
    
    if not os.path.isfile(outputObject):
        print("ERROR: Output file not found: " + args.output)
        sys.exit(1)
    
    if outputDestination:
        # move outputObject to args.output
        try:
            os.rename(outputObject, outputDestination)
            dadaist2.console.log(f"Output file: \"[cyan]{args.output}[/cyan]\"", highlight=False)
        except OSError as e:
            print("ERROR: Failed to move output file: " + str(e))
            sys.exit(1)
    else:
        dadaist2.console.log(f"Output file: \"[red]{outputObject}[/red]\"", highlight=False)

    if args.verbose:
        dadaist2.console.log(output.decode("utf-8"))
"""

=head1 NAME

B<dadaist2-phyloseqMake> - Generate PhyloSeq object from the command line

=head1 AUTHOR

Andrea Telatin and Rebecca Ansorge

=head1 PARAMETERS

=over 4

=item I<-i>, I<--input> DIR

Directory containing the C<MicrobiomeAnalyst> folder generated by Dadaist2.

=item I<-o>, I<--output>

Output filename. If omitted, a 'phyloseq.rds' file will be placed in the input directory.

=item I<--verbose>

Print verbose output

=back

=head1 SOURCE CODE AND DOCUMENTATION

The program is freely available at L<https://quadram-institute-bioscience.github.io/dadaist2>
released under the MIT licence. The website contains further DOCUMENTATION.
"""
