package SL::DB::AdditionalBillingAddress;

use strict;

use SL::DB::MetaSetup::AdditionalBillingAddress;
use SL::DB::Manager::AdditionalBillingAddress;

__PACKAGE__->meta->initialize;

__PACKAGE__->after_save('_after_save_ensure_only_one_marked_as_default_per_customer');

sub _after_save_ensure_only_one_marked_as_default_per_customer {
  my ($self) = @_;

  if ($self->id && $self->customer_id && $self->default_address) {
    SL::DB::Manager::AdditionalBillingAddress->update_all(
      set   => { default_address => 0 },
      where => [
        customer_id => $self->customer_id,
        '!id'       => $self->id,
      ],
    );
  }

  return 1;
}

sub displayable_id {
  my $self = shift;
  my $text = join('; ', grep { $_ } (map({ $self->$_ } qw(name street)),
                                     join(' ', grep { $_ }
                                               map  { $self->$_ }
                                               qw(zipcode city))));

  return $text;
}

sub used {
  my ($self) = @_;

  return unless $self->id;

  require SL::DB::Order;
  require SL::DB::Invoice;
  require SL::DB::DeliveryOrder;

  my %args = (query => [ billing_address_id => $self->id ]);

  return SL::DB::Manager::Invoice->get_all_count(%args)
      || SL::DB::Manager::Order->get_all_count(%args)
      || SL::DB::Manager::DeliveryOrder->get_all_count(%args);
}

sub detach {
  $_[0]->customer_id(undef);
  return $_[0];
}

1;
