package RWDE::DB::BigFile;

use strict;
use warnings;

use Error qw(:try);

use RWDE::Exceptions;
use RWDE::DB::S3;

use RWDE::Configuration; 

sub s3_put {
	my ($self, $params) = @_;

	my %S3_hash = $self->get_s3_hash();

	while ( my ($field, $key) = each(%S3_hash) ) {
		$self->Put({ key_name => $key, content_type => $self->image_filetype, content => $self->$field });
	}
	
	return();
}

sub s3_delete {
	my ($self, $params) = @_;

	my %S3_hash = $self->get_s3_hash();

	while ( my ($field, $key) = each(%S3_hash) ) {
	$self->Delete({ key_name => $key });	}

  return();
}

sub s3_get {
	my ($self, $params) = @_;

	my %S3_hash = $self->get_s3_hash();
  my $field = $$params{field_name} || 'image_data';
	return $self->Get({ key_name => $S3_hash{$field} });
}

sub s3_publicRead {
	my ($self, $params) = @_;
	my %S3_hash = $self->get_s3_hash();

	while ( my ($field, $key) = each(%S3_hash) ) {
		$self->Put({ key_name => $key, content_type => $self->image_filetype, content => $self->get_data(), acl => 'public-read' });
	}
}

sub s3_noPublicRead {
	my ($self, $params) = @_;
	my %S3_hash = $self->get_s3_hash();

	while ( my ($field, $key) = each(%S3_hash) ) {
		$self->Put({ key_name => $key, content_type => $self->image_filetype, content => $self->get_data(), acl => 'private' });
	}
}

sub Put {
	my ($self, $params) = @_;

	my $s3 = RWDE::DB::S3->new();

  $s3->putObject(lc(RWDE::Configuration->ServiceName), $$params{key_name}, $$params{content_type}, $$params{content}, $$params{acl});
	
	return();
}

sub Delete {
	my ($self, $params) = @_;

	my $s3 = RWDE::DB::S3->new();

  $s3->deleteObject(lc(RWDE::Configuration->ServiceName), $$params{key_name});

	return();
}

sub Get {
	my ($self, $params) = @_;

	my $s3 = RWDE::DB::S3->new();

  my $response = $s3->getObject(lc(RWDE::Configuration->ServiceName), $$params{key_name});
	
	return $response->content;
}


1;

