#!/usr/bin/perl
# vim: set ft=perl:

use Test::More;
use SQL::Translator;
use SQL::Translator::Schema::Constants;
use Test::SQL::Translator qw(maybe_plan);

BEGIN {
  maybe_plan(31, 'SQL::Translator::Parser::Excel');
  SQL::Translator::Parser::Excel->import('parse');
}

my $tr     = SQL::Translator->new(parser => "Excel");
my $t      = $tr->translate(filename => "t/data/Excel/t.xls");
my $schema = $tr->schema;

my @tables = $schema->get_tables;
is(scalar @tables, 1, 'Parsed 1 table');

my $table = shift @tables;
is($table->name, 'Sheet1', 'Table name is "Sheet1"');

my @fields = $table->get_fields;
is(scalar @fields, 7, 'Table has 7 fields');

my $f1 = shift @fields;
is($f1->name,           'ID',      'First field name is "ID"');
is(lc $f1->data_type,   'integer', 'Data type is "integer"');
is($f1->size,           5,         'Size is "5"');
is($f1->is_primary_key, 1,         'Field is PK');

my $f2 = shift @fields;
is($f2->name,           'text', 'Second field name is "text"');
is(lc $f2->data_type,   'char', 'Data type is "char"');
is($f2->size,           7,      'Size is "7"');
is($f2->is_primary_key, 0,      'Field is not PK');

my $f3 = shift @fields;
is($f3->name,           'number',  'Third field name is "number"');
is(lc $f3->data_type,   'integer', 'Data type is "integer"');
is($f3->size,           1,         'Size is "1"');
is($f3->is_primary_key, 0,         'Field is not PK');

my $f4 = shift @fields;
TODO: {
  eval { require Spreadsheet::ParseExcel };
  todo_skip
      "Bug in Spreadsheet::ParseExcel, http://rt.cpan.org/Public/Bug/Display.html?id=39892", 4
      if (  $Spreadsheet::ParseExcel::VERSION > 0.32
        and $Spreadsheet::ParseExcel::VERSION < 0.41);

  is($f4->name,           'math',  'Fourth field name is "math"');
  is(lc $f4->data_type,   'float', 'Data type is "float"');
  is($f4->size,           '3,1',   'Size is "3,1"');
  is($f4->is_primary_key, 0,       'Field is not PK');
}

my $f5 = shift @fields;
is($f5->name,           'bitmap', 'Fifth field name is "bitmap"');
is(lc $f5->data_type,   'char',   'Data type is "char"');
is($f5->size,           1,        'Size is "1"');
is($f5->is_primary_key, 0,        'Field is not PK');

my $f6 = shift @fields;
is($f6->name,           'today', 'Sixth field name is "today"');
is(lc $f6->data_type,   'char',  'Data type is "CHAR"');
is($f6->size,           10,      'Size is "10"');
is($f6->is_primary_key, 0,       'Field is not PK');

my $f7 = shift @fields;
is($f7->name, 'silly_field_with_random_characters', 'Seventh field name is "silly_field_with_random_characters"');
is(lc $f7->data_type,   'char',                     'Data type is "CHAR"');
is($f7->size,           11,                         'Size is "11"');
is($f7->is_primary_key, 0,                          'Field is not PK');