package FS::cdr::qwest;

use strict;
use vars qw(@ISA %info);
use FS::cdr qw(_cdr_date_parser_maker);

@ISA = qw(FS::cdr);

my %disposition = (
  0 => 'ANSWERED',  #normal completed call
  1 => 'ANSWERED',  #"treated call"
  2 => 'NO ANSWER', #abandoned call
  3 => 'ERROR',     #abnormal call
  4 => 'ERROR',     #signaling system error
  5 => 'ANSWERED',  #forced disconnect
  6 => 'ANSWERED',  #off-net route advance
  7 => 'NO ANSWER', #test call
  8 => 'NO ANSWER', #recorded promotion
  9 => 'ERROR',     #TCAP DCP response time-out
  12=> 'ANSWERED',  #abnormal release
  13=> 'ERROR',     #"completed answer CDR"(?)
  15=> 'ERROR',     #"COS failure"(?)
);

my $startdate = _cdr_date_parser_maker('startdate');
my $enddate = _cdr_date_parser_maker('enddate');

%info = (
  'name'          => 'Qwest (Standard Daily)',
  'weight'        => 400,
  'type'          => 'fixedlength',
  'fixedlength_format' => [qw(
    billing_cycle_id:6:1:6
    discn_dt:8:7:14
    anstype:6:15:20
    pindigs:4:21:24
    origtime:6:25:30
    discn_time:6:31:36
    time_chng:1:37:37
    ani:15:38:52
    infodig:2:53:54
    calldur:11:55:65
    univacc:10:66:75
    compcode:6:76:81
    dialedno:15:82:96
    calledno:15:97:111
    predig:1:112:112
    seqnum:11:113:123
    orig_dt:8:124:131
    finsid:6:132:137
    trtmtcd:6:138:143
    anisuff:6:144:149
    origgrp:6:150:155
    origmem:6:156:161
    termgrp:6:162:167
    termmem:6:168:173
    fintkgrp:6:174:179
    billnum:24:180:203
    acctcd:12:204:215
    swid:6:216:221
    orig_bill_file_id:11:222:232
    orig_trunk_group_name:12:233:244
    orig_trunk_time_bias_ind:6:245:250
    term_trunk_group_name:12:251:262
    final_trunk_group_name:12:263:274
    orig_trunk_usage_ind:6:275:280
    orig_pricing_npa:3:281:283
    orig_pricing_nxx:3:284:286
    term_pricing_npa:3:287:289
    term_pricing_nxx:3:290:292
    prcmp_id:6:293:298
    component_group_cd:2:299:300
    component_group_val:24:301:324
    intra_lata_ind:1:325:325
    carrsel:1:326:326
    cic:6:327:332
    origlrn:10:333:342
    portedno:10:343:352
    lnpcheck:1:353:353
  )],
  'import_fields' => [
    '',                 # billing_cycle_id
    sub {               # discn_dt
      # hold onto this, combine it with discn_time later
      # YYYYMMDD
      my ($cdr, $data, $conf, $param) = @_;
      $param->{'discn_dt'} = $data;
      '';
    },
    '',                 # anstype
    '',                 # pindigs
    sub {               # orig_time
      # and this
      # hhmmss
      my ($cdr, $data, $conf, $param) = @_;
      $param->{'orig_time'} = $data;
      '';
    },
    sub {               # discn_time
      my ($cdr, $data, $conf, $param) = @_;
      $data = $param->{'discn_dt'} . $data; #YYYYMMDDhhmmss
      $enddate->($cdr, $data);
    },
    '',                 # time_chng
    'src',              # ani (originating number)
    '',                 # infodig
    'billsec',          # calldur
    '',                 # univacc
    sub {               # compcode
      my ($cdr, $data) = @_;
      my $compcode = sprintf('%d', $data);
      $cdr->disposition($disposition{$compcode});
      # only those that map to ANSWERED are billable, but that should be 
      # set in rating options, not enforced here
      '';
    },
    'dst',              # dialedno
    '',                 # calledno (physical terminating number)
    '',                 # predig (0/1/011 prefix)
    '',                 # seqnum
    sub {               # orig_dt
      # backward from the discn_ fields
      my ($cdr, $data, $conf, $param) = @_;
      $data .= $param->{'orig_time'};
      $startdate->($cdr, $data);
    },
    '',                 # finsid
    '',                 # trtmtcd
    '',                 # anisuff
    'channel',          # origgrp (orig. trunk group)
    '',                 # origmem (belongs in channel?)
    'dstchannel',       # termgrp (term. trunk group)
    '',                 # termmem (same?)
    '',                 # fintkgrp
    'charged_party',    # billnum (empty for "normal" calls)
    'accountcode',      # acctcd
    '',                 # swid
    '',                 # orig_bill_file_id
    '',                 # orig_trunk_group_name
    '',                 # orig_trunk_time_bias_ind
    '',                 # term_trunk_group_name
    '',                 # final_trunk_group_name
    '',                 # orig_trunk_usage_ind
    '',                 # orig_pricing_npa
    '',                 # orig_pricing_nxx
    '',                 # term_pricing_npa
    '',                 # term_pricing_nxx
    '',                 # prcmp_id
    '',                 # component_group_cd
    '',                 # component_group_val
    '',                 # intra_lata_ind (or should we use this?)
    '',                 # carrsel
    '',                 # cic
    '',                 # origlrn
    '',                 # portedno
    '',                 # lnpcheck
  ],

);

1;
