use strict;
use warnings;

package Smartcat::App::Command;
use App::Cmd::Setup -command;

use Cwd qw(abs_path);
use File::Basename;

sub opt_spec {
    return (
        #[ 'config:s' => 'Config file path' ],
        [ 'token-id:s' => 'Smartcat account id' ],
        [ 'token:s'    => 'API token' ],
        [ 'log:s'      => 'Log file path' ],
        [ 'base-url:s' => 'Base Smartcat URL' ],
        [ 'debug'      => 'Debug mode' ]
    );
}

sub project_id_opt_spec {
    return ( [ 'project-id:s' => 'Project Id' ], );
}

sub project_workdir_opt_spec {
    return ( [ 'project-workdir:s' => 'Project translation files path' ], );
}

sub file_params_opt_spec {
    return (
        [ 'filetype:s' => 'Type of translation files' ],
    );
}

sub extract_id_from_name_opt_spec {
    return (
        [ 'extract-id-from-name' => 'Extract stable external document identifiers from filenames in "name---id.ext" format for comparison and automatic renaming' ],
    );
}

sub external_tag_opt_spec {
    return (
        ['external-tag:s' => 'Set custom external tag for project. Default value: "source:Serge"']
    );
}

sub validate_file_params {
    my ( $self, $opt, $args ) = @_;
    my $rundata = $self->app->{rundata};
    $rundata->{filetype} = defined $opt->{filetype} ? $opt->{filetype} : '.po';
}

sub validate_project_id {
    my ( $self, $opt, $args ) = @_;
    my $rundata = $self->app->{rundata};
    $self->usage_error("'project_id' is required")
      unless defined $opt->{project_id};
    $rundata->{project_id} = $opt->{project_id};
}

sub validate_project_workdir {
    my ( $self, $opt, $args ) = @_;

    my $rundata = $self->app->{rundata};
    $self->app->usage_error(
"'project_workdir', which is set to '$opt->{project_workdir}', does not point to a valid directory"
    ) unless -d $opt->{project_workdir};
    $rundata->{project_workdir} = abs_path( $opt->{project_workdir} );
}

sub validate_args {
    my ( $self, $opt, $args ) = @_;

    my $app     = $self->app;
    my $rundata = $self->app->{rundata};

    if ( defined $opt->{token_id} && defined $opt->{token} ) {
        $app->{config}->{username} = $opt->{token_id};
        $app->{config}->{password} = $opt->{token};
    }

    if ( defined $opt->{base_url} ) {
        $app->{config}->{base_url} = $opt->{base_url};
    }

    if ( defined $opt->{log} ) {
        $self->usage_error(
"directory of 'log', which is set to '$opt->{log}', does not point to a valid directory"
        ) unless -d dirname( $opt->{log} ) && -w _;
        $app->{config}->{log} = $opt->{log};
    }

    $self->usage_error(
"set auth params via 'config' command first or provide options '--token-id' and '--token'"
      )
      unless ( defined $app->{config}->username
        && defined $app->{config}->password );

    $rundata->{debug} = 1 if defined $opt->{debug};

    $app->init;
}

1;