#! /usr/bin/env perl
#
# Copyright (C) 2009-2025 Alexis Bienvenüe <paamc@passoire.fr>
#
# This file is part of Auto-Multiple-Choice
#
# Auto-Multiple-Choice is free software: you can redistribute it
# and/or modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation, either version 2 of
# the License, or (at your option) any later version.
#
# Auto-Multiple-Choice is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Auto-Multiple-Choice.  If not, see
# <http://www.gnu.org/licenses/>.

use warnings;
use 5.012;

use Getopt::Long;

use AMC::Basic;
use AMC::Gui::Avancement;

use Module::Load;

use_amc_plugins();

my $module = 'CSV';
my $output = '';

my $data_dir        = '';
my $fich_notes      = '';
my $fich_assoc      = '';
my $fich_noms       = '';
my $association_key = '';
my $noms_encodage   = 'UTF-8';
my $csv_build_name  = '';
my @o_out           = ();
my $sort            = 'n';
my $useall          = 1;
my $rtl             = '';

my $o_out_csv = { ticked => undef, };
my $o_out_ods = {
    stats      => undef,
    statsindic => undef,
    groupsums  => undef,
    groupsep   => undef,
    filter     => undef,
};

GetProjectOptions(
    ":export_module|module=s"          => \$module,
    ":export_sort|sort=s"              => \$sort,
    ":export_include_abs|useall=s"     => \$useall,
    ":data:dir|data=s"                 => \$data_dir,
    ":listeetudiants:dir|fich-noms=s"  => \$fich_noms,
    ":liste_key|association-key=s"     => \$association_key,
    ":csv_build_name|csv-build-name=s" => \$csv_build_name,
    ":liste:enc|noms-encodage=s"       => \$noms_encodage,
    ":annote_rtl|rtl!"                 => \$rtl,
    "option-out=s"                     => \@o_out,

    ":export_ods_stats|export-ods-stats=s"           => \$o_out_ods->{stats},
    ":export_ods_statsindic|export-ods-statsindic=s" =>
      \$o_out_ods->{statsindic},
    ":export_ods_group|export-ods-group=s"       => \$o_out_ods->{groupsums},
    ":export_ods_groupsep|export-ods-groupsep=s" => \$o_out_ods->{groupsep},
    ":export_ods_filter|export-ods-filter!"      => \$o_out_ods->{filter},

    ":export_csv_ticked|export-csv-ticked=s" => \$o_out_csv->{ticked},

    "output|o=s" => \$output,
);

load("AMC::Export::$module");
my $ex = "AMC::Export::$module"->new();

$ex->set_options( "sort", keys => $sort );

$ex->set_options(
    "fich",
    datadir           => $data_dir,
    noms              => $fich_noms,
                );

$ex->set_options( 'association', key => $association_key );

$ex->set_options(
    "noms",
    encodage    => $noms_encodage,
    useall      => $useall,
    identifiant => $csv_build_name,
);

$ex->set_options( "out", rtl => $rtl );

if ( $module eq 'CSV' ) {
    for my $k ( keys %$o_out_csv ) {
        $ex->set_options( "out", $k => $o_out_csv->{$k} )
          if ( defined( $o_out_csv->{$k} ) );
    }
}

if ( $module eq 'ods' ) {
    for my $k ( keys %$o_out_ods ) {
        $ex->set_options( "out", $k => $o_out_ods->{$k} )
          if ( defined( $o_out_ods->{$k} ) );
    }
}

for my $oo (@o_out) {
    if ( $oo =~ /([^=]+)=(.*)/ ) {
        $ex->set_options( "out", $1 => $2 );
    }
}

debug "Exporting...";

$ex->export($output);

print $ex->messages_as_string();
