package FS::part_pkg::global_Mixin;

use strict;
use vars qw(%info);

use Tie::IxHash;
tie my %a2billing_types, 'Tie::IxHash', (
  0 => 'Prepaid',
  1 => 'Postpaid',
);

tie my %a2billing_simultaccess, 'Tie::IxHash', (
  0 => 'Disabled',
  1 => 'Enabled',
);

# much false laziness with FS::Record::ut_money
sub validate_moneyn {
  my ($option, $valref) = @_;
  if ( $$valref eq '' ) {
    return '';
  } elsif ( $$valref =~ /^\s*(\d*)(\.\d{1})\s*$/ ) {
    #handle one decimal place without barfing out
    $$valref = ( ($1||''). ($2.'0') ) || 0;
  } elsif ( $$valref =~ /^\s*(\d*)(\.\d{2})?\s*$/ ) {
    $$valref = ( ($1||''). ($2||'') ) || 0;
  } else {
    return "Illegal (money) $option: ". $$valref;
  }
  return '';
}

tie my %count_available_phones, 'Tie::IxHash', (
  0 => 'Provisioned phone services',
  1 => 'All available phone services',
);

%info = (
  'disabled' => 1,
  'fields' => {
    'setup_fee' => { 
      'name' => 'Setup fee for this package',
      'default' => 0,
      'validate' => \&validate_moneyn,
    },
    'recur_fee' => { 
      'name' => 'Recurring fee for this package',
      'default' => 0,
      'validate' => \&validate_moneyn,
    },
    'unused_credit_cancel' => {
      'name' => 'Credit the customer for the unused portion of service at '.
                 'cancellation',
      'type' => 'checkbox',
    },
    'unused_credit_suspend' => {
      'name' => 'Credit the customer for the unused portion of service when '.
                'suspending',
      'type' => 'checkbox',
    },
    'unused_credit_change' => {
      'name' => 'Credit the customer for the unused portion of service when '.
                'changing packages',
      'type' => 'checkbox',
    },
    'delay_cancel' => {
      'name' => 'Automatic suspension period before cancelling (configuration setting part_pkg-delay_cancel-days)',
      'type' => 'checkbox',
    },
    'count_available_phones' => { 'name' => 'Count taxable phone lines',
      'type' => 'radio',
      'options' => \%count_available_phones,
      'default' => 0,
    },

    # miscellany--maybe put this in a separate module?

    'a2billing_tariff' => {
      'name'        => 'A2Billing tariff group ID',
      'display_if'  => sub {
        FS::part_export->count("exporttype = 'a2billing'") > 0;
      }
    },
    'a2billing_type' => {
      'name'        => 'A2Billing card type',
      'display_if'  => sub {
        FS::part_export->count("exporttype = 'a2billing'") > 0;
      },
      'type'        => 'select',
      'select_options' => \%a2billing_types,
    },
    'a2billing_simultaccess' => {
      'name'        => 'A2Billing Simultaneous Access',
      'display_if'  => sub {
        FS::part_export->count("exporttype = 'a2billing'") > 0;
      },
      'type'        => 'select',
      'select_options' => \%a2billing_simultaccess,
    },  
    'a2billing_carrier_cost_min' => {
      'name'        => 'A2Billing inbound carrier cost',
      'display_if'  => sub {
        FS::part_export->count("exporttype = 'a2billing'") > 0;
      },
    },
   'a2billing_carrer_initblock_offp' => {
      'name'        => 'A2Billing inbound carrier min duration',
      'display_if'  => sub {
        FS::part_export->count("exporttype = 'a2billing'") > 0;
      },
    },
    'a2billing_carrier_increment_offp' => {
      'name'        => 'A2Billing inbound carrier billing block',
      'display_if'  => sub {
        FS::part_export->count("exporttype = 'a2billing'") > 0;
      },
    },
    'a2billing_retail_cost_min_offp' => {
      'name'        => 'A2Billing inbound retail cost',
      'display_if'  => sub {
        FS::part_export->count("exporttype = 'a2billing'") > 0;
      },
    },
    'a2billing_retail_initblock_offp' => {
      'name'        => 'A2Billing inbound retail min duration',
      'display_if'  => sub {
        FS::part_export->count("exporttype = 'a2billing'") > 0;
      },
    },
    'a2billing_retail_increment_offp' => {
      'name'        => 'A2Billing inbound retail billing block',
      'display_if'  => sub {
        FS::part_export->count("exporttype = 'a2billing'") > 0;
     },
   },

 },
  'fieldorder' => [ qw(
    setup_fee
    recur_fee
    unused_credit_cancel
    unused_credit_suspend
    unused_credit_change
    delay_cancel

    count_available_phones

    a2billing_tariff
    a2billing_type
    a2billing_simultaccess
    a2billing_carrier_cost_min
    a2billing_carrer_initblock_offp
    a2billing_carrier_increment_offp
    a2billing_retail_cost_min_offp
    a2billing_retail_initblock_offp
    a2billing_retail_increment_offp
  )],
);

1;
