package Pear::LocalLoop::Import::LCCCsv::Postcodes;
use Moo;

use Geo::UK::Postcode::Regex;

extends qw/Pear::LocalLoop::Import::LCCCsv/;

has '+csv_required_columns' => (
  builder => sub { return [ qw/
  postcode
  ward
  / ]},
);

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

  $self->check_headers;

  while ( my $row = $self->get_csv_line ) {
    $self->_row_to_result($row);
  }
}

sub _row_to_result {
  my ( $self, $row ) = @_;

  my $postcode_obj = Geo::UK::Postcode::Regex->parse( $row->{postcode} );

  my $ward = $self->schema->resultset('GbWard')->find_or_create(ward => $row->{ward});

  my $postcode_r = $self->schema->resultset('GbPostcode')->find({
    outcode => $postcode_obj->{outcode},
    incode => $postcode_obj->{incode},
  });

  return unless $postcode_r;
  return if $postcode_r->ward;

  $postcode_r->update({ ward_id => $ward->id });
}

1;
