package Common::DB::Export::Directory;

use constant 'S3BUCKET' => 's3://royaltyshare-db-backups';
use constant 'MOUNT'    => '/mnt/mysql/stats';

use strict;
use warnings;

use File::Find::Rule;

use lib '/app/tools/common/lib';
use Common::Session;

use base 'Common::Sys::Directory';

__PACKAGE__->mk_accessors(qw/mount bucket parent schema table/);

sub _init {
    my $self = shift;
    $self->SUPER::_init();
    $self->mount(MOUNT);
    $self->bucket(S3BUCKET);
    $self;
}

sub local {
    my $self  = shift;
    my $local = $self->mount;
    $local = $local . '/' . $self->parent if defined $self->parent;
    $local = $local . '/' . $self->schema if defined $self->schema;
    $local = $local . '/' . $self->table  if defined $self->table;
    $local;
}

sub remote {
    my $self   = shift;
    my $remote = $self->bucket;
    $remote = $remote . '/' . $self->parent if defined $self->parent;
    $remote = $remote . '/' . $self->schema if defined $self->schema;
    $remote = $remote . '/' . $self->table  if defined $self->table;
    $remote;
}

sub localfiles {
    my $self = shift;
    my $name = shift;
    $self->path( $self->local );
    $self->sysfiles($name);
}

sub localcreate {
    my $self  = shift;
    my $owner = shift || 'mysql';
    my $local = $self->local;
    runcmd("sudo mkdir -p $local");
    runcmd("sudo chown $owner:$owner -R $local");
    runcmd("sudo chmod 775 -R $local");
    $self->local;
}

sub localremove {
    my $self  = shift;
    my $local = $self->local;
    if ( -d $local ) {
        logMessage( 'warn', "Removing directory $local" );
        runcmd("sudo rm -rf $local");
    }
}

sub remoteremove {
    my $self   = shift;
    my $remote = $self->remote;
    my $exists = runcmd("aws s3 ls $remote");
    if ( defined $exists->[0] and $exists->[0] ne '' ) {
        logMessage( 'warn', "Removing directory $remote" );
        my $rm = runcmd("aws s3 rm --recursive $remote");
        if ( $rm->[2] ) {
            logMessage( 'error', $rm->[1] );
        }
    }
}

1;
