package FS::cust_pkg::API;

use strict;

sub API_getinfo {
  my $self = shift;

  +{ ( map { $_=>$self->$_ } $self->fields ),
   };

}

# currently only handles location change...
# eventually have it handle all sorts of package changes
sub API_change {
  my $self = shift;
  my %opt = @_;

  return { 'error' => 'Cannot change canceled package' }
    if $self->get('cancel');

  my %changeopt;

  # update location--accepts raw fields OR location
  my %location_hash;
  foreach my $field ( qw(
    locationname
    address1
    address2
    city
    county
    state
    zip
    addr_clean
    country
    censustract
    censusyear
    location_type
    location_number
    location_kind
    incorporated
  ) ) {
    $location_hash{$field} = $opt{$field} if $opt{$field};
  }
  return { 'error' => 'Cannot pass both locationnum and location fields' }
    if $opt{'locationnum'} && %location_hash;

  if (%location_hash) {
    my $cust_location = FS::cust_location->new({
      'custnum' => $self->custnum,
      %location_hash,
    });
    $changeopt{'cust_location'} = $cust_location;
  } elsif ($opt{'locationnum'}) {
    $changeopt{'locationnum'} = $opt{'locationnum'};
  }

  # not quite "nothing changed" because passed changes might be identical to current record,
  #   we don't currently check for that, don't want to imply that we do...but maybe we should?
  return { 'error' => 'No changes passed to method' }
    unless $changeopt{'cust_location'} || $changeopt{'locationnum'};

  $changeopt{'keep_dates'} = 1;

  my $pkg_or_error = $self->change( \%changeopt );
  my $error = ref($pkg_or_error) ? '' : $pkg_or_error;

  return { 'error' => $error } if $error;

  # return all fields?  we don't yet expose them through FS::API
  return { map { $_ => $pkg_or_error->get($_) } qw( pkgnum locationnum ) };

}

1;
