package Nephia::Setup::Plugin::Minimal;
use strict;
use warnings;
use parent 'Nephia::Setup::Plugin';
use File::Spec;

sub fix_setup {
    my ($self) = @_;
    $self->setup->action_chain->append(
        CreateProject  => \&create_project,
        CreateClass    => \&create_class,
        CreateTests    => \&create_tests,
        CreatePSGI     => \&create_psgi,
        CreateCPANFile => \&create_cpanfile,
        CreateChanges  => \&create_changes,
    );
}

sub create_project {
    my ($setup, $context) = @_;
    my $path = File::Spec->catdir($setup->approot);
    $setup->stop("Project directory %s already exists.", $path) if -d $path;
    $setup->makepath();
    return $context;
}

sub create_class {
    my ($setup, $context) = @_;
    my $data = $context->get('data_section')->(__PACKAGE__)->get_data_section('MyClass.pm');
    $setup->spew($setup->classfile, $setup->process_template($data));
    return $context;
}

sub create_tests {
    my ($setup, $context) = @_;
    my $data = $context->get('data_section')->(__PACKAGE__)->get_data_section('001_use.t');
    $setup->spew('t', '001_use.t', $setup->process_template($data));
    return $context;
}

sub create_psgi {
    my ($setup, $context) = @_;
    my $data = $context->get('data_section')->(__PACKAGE__)->get_data_section('app.psgi');
    $setup->spew('app.psgi', $setup->process_template($data));
    return $context;
}

sub create_cpanfile {
    my ($setup, $context) = @_;
    my $data = $setup->cpanfile;
    $setup->spew('cpanfile', $data);
    return $context;
}

sub create_changes {
    my ($setup, $context) = @_;
    my $data = $context->get('data_section')->(__PACKAGE__)->get_data_section('Changes');
    $setup->spew('Changes', $setup->process_template($data));
    return $context;
}

1;

__DATA__

@@ MyClass.pm
package {{$self->appname}};
use strict;
use warnings;
use Nephia;

our $VERSION = 0.80;

app {
    [200, [], 'Hello, World!'];
};

1;

:::encoding utf-8

:::head1 NAME

{{$self->appname}} - Web Application that powered by Nephia

:::head1 DESCRIPTION

An web application

:::head1 SYNOPSIS

    use {{$self->appname}};
    {{$self->appname}}->run;

:::head1 AUTHOR

clever people

:::head1 LICENSE

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

:::head1 SEE ALSO

L<Nephia>

:::cut

@@ 001_use.t
use strict;
use warnings;
use Test::More;

BEGIN {
    use {{$self->appname}};
};

ok 1, 'succeed to use';

done_testing;

@@ app.psgi
use strict;
use warnings;
use File::Spec;
use File::Basename 'dirname';
use lib (
    File::Spec->catdir(dirname(__FILE__), 'lib'), 
);
use {{$self->appname}};

{{$self->appname}}->run;

@@ Changes
Revision history for Perl extention {{$self->appname}}

{{$NEXT}}

    - original version

__END__

=encoding utf-8

=head1 NAME

Nephia::Setup::Plugin::Minimal - Minimal setup of Nephia

=head1 DESCRIPTION

Minimal setup plugin

=head1 SYNOPSIS

    $ nephia-setup --plugins Minimal YourApp

=head1 ENABLED PLUGINS

=over 4

=item L<Nephia::Plugin::Basic>

=back

=head1 AUTHOR

ytnobody E<lt>ytnobody@gmail.comE<gt>

=cut