#!/usr/bin/perl



use utf8;
use access;



#-----------------------------------------------------------------------------
# Přečte ze souboru tabulku her. Data uloží do globálního hashe. První tři znaky
# každého klíče v hashi identifikují hru, následuje dvojtečka, mezera
# a úplný název pole v tabulce Hry v databázi Hry.mdb (zkonvertovaný).
# Kromě toho funkce také naplní (nebo doplní) globální pole @kody,
# do nějž uloží třípísmenné kódy her (v pořadí, v jakém byly přečteny), a
# globální pole @hry_pole, do nějž uloží názvy polí v tabulce her (v pořadí,
# v němž je očekává na vstupu).
#-----------------------------------------------------------------------------
sub precist_hry
{
    my $soubor = shift; # cesta k souboru s tabulkou her
    my $tabulka = access::cist_tabulku_access($soubor, "utf-8");
    # Vrstva zajišťující kompatibilitu s předcházející verzí.
    # Odkaz na načtenou tabulku nepřekročí hranice této funkce,
    # data se zkopírují do globálních proměnných @kody a %hry.
    for(my $i = 0; $i<=$#{$tabulka}; $i++)
    {
        # Přidat kód hry do globálního seznamu kódů her.
        push(@kody, $tabulka->[$i]{kod});
        # Přidat údaje o hře do globálního hashe.
        while(my ($klic, $hodnota) = each(%{$tabulka->[$i]}))
        {
            $hry{$tabulka->[$i]{kod}.": ".$klic} = $hodnota;
        }
    }
    # Načíst alternativní názvy her.
    $tabulka = access::cist_tabulku_access("nazvy.txt", "utf-8");
    foreach my $nazev (@{$tabulka})
    {
        unless($nazev->{nazev} eq $hry{$nazev->{"kod hry"}.": nazev"})
        {
            push(@{$hry{$nazev->{"kod hry"}}{_dalsi_nazvy}}, $nazev->{nazev});
        }
    }
}



#-----------------------------------------------------------------------------
# Přečte ze souboru tabulku provedení her. Do globálního hashe her pak přidá
# ke každé hře seznam vydavatelů.
#-----------------------------------------------------------------------------
sub precist_provedeni
{
    my $soubor = shift; # cesta k souboru s tabulkou provedení
    my $tabulka = access::cist_tabulku_access($soubor, "utf-8");
    foreach my $provedeni (@{$tabulka})
    {
        my $aktualni_vydavatel = $provedeni->{"vydavatele.nazev"};
        my $vydavatele = $hry{$provedeni->{"kod hry"}}{_vydavatele};
        # Je-li tohle první provedení dané hry od daného vydavatele, přidat vydavatele
        # do seznamu vydavatelů dané hry.
        unless(grep{$_ eq $aktualni_vydavatel}(@{$vydavatele}))
        {
            push(@{$hry{$provedeni->{"kod hry"}}{_vydavatele}}, $aktualni_vydavatel);
        }
    }
}



#-----------------------------------------------------------------------------
# Projde tabulku exemplářů her na Palubě a v jejím okolí s jediným cílem:
# spočítat exempláře.
#-----------------------------------------------------------------------------
sub zjistit_pocet_exemplaru
{
    # Cesta k souboru se záznamy o exemplářích her.
    my $soubor = $_[0];
    open(EXEMPLARE, $soubor);
    while(<EXEMPLARE>)
    {
        my @zaznam = access::dekodovat_zaznam_access($_);
        if($zaznam[4] eq "Paluba")
        {
            $hry{$zaznam[0].": pocet exemplaru"}++;
        }
    }
    close(EXEMPLARE);
}



#-----------------------------------------------------------------------------
# Projde ceník her na prodej, aby zjistil, které hry na prodej máme a které ne.
#-----------------------------------------------------------------------------
sub zjistit_pocet_na_prodej
{
    # Cesta k souboru se záznamy o exemplářích her.
    my $soubor = $_[0];
    open(EXEMPLARE, $soubor);
    while(<EXEMPLARE>)
    {
        if(m/^"(\w\w\w)"/)
        {
            $hry{"$1: prodej"} = 1;
        }
    }
    close(EXEMPLARE);
}
