/**
 * Palauttaa yhden keskustelun html-koodin halutulla tavalla, eli joko
 * näytetään kaikki kommentit tai vain osa ($kiinni = true).
 *
 * <p>Muutos 27.4.2013: suodatus lisätty, eli jos keskustelun aloittaja-
 * henkilö on suodatettu, ei keskustelua palauteta ollenkaan (tätä on
 * mahdollista hienosäätää tarvittaessa). Muista keskusteluista
 * suodatettujen henkilöiden viestit jätetään yksittäin pois.</p>
 * 
 * @param int $kesk_id Keskustelun id eli aloitusviestin id = kommenttien
 * emo_id.
 * @param bool $auki totuusarvo true, jos kaikki kommentit näytetään, false -
 * vain osa ($kiinni_lkm kappaletta vanhoja + uudet).
 * @param int $kiinni_lkm näin monta viestiä näytetään korkeintaan,
 * kun keskustelu on "kiinni"-tilassa (MUUTTUNUT).
 * @param int $aikaraja uusien viestien alkuaika sekunteina. Tätä vanhempia
 * ei näytetä ollenkaan (riittää toki, että yksi viesti keskustelussa on
 * aikarajaa uudempi).
 * @param Tietokantaolio $tietokantaolio
 * @param bool $kuningas
 * @param int $oma_id Käyttäjän om id.
 * @return string Palauttaa keskustelun html:n ilman alku- ja päätedivtageja
 * (helpottaa näyttötyylin muuttamista ajaxin avulla).
 */
function hae_keskustelu($kesk_id, $auki, $kiinni_lkm, $aikaraja, $tietokantaolio, $kuningas, $oma_id)
{
    // Haetaan ensin kaikki suodattimet, joissa käyttäjä itse toinen osapuoli:
    $suodattimet = Suodatin::hae_suodattimet($oma_id, $tietokantaolio);
    $omaid = $oma_id;
    // Ei mee sekaisin, molempia voi käyttää.
    $palaute = "ei_onnistunut";
    $mj = "";
    // html-koodi
    $on_piilotettavia = false;
    // Näytetäänkö kaikki kommentit?
    $kommenttien_lkm = 0;
    // keskustelun kommenttien lkm.
    // Haetaan ensin keskustelun aloitusviesti:
    $aloitusviesti = $tietokantaolio->hae_eka_osuma_oliona("viestit", "id", $kesk_id);
    // Ellei tämä onnistunut, ei tehdä mitään. Muuten jatketaan.
    if ($aloitusviesti != "tuntematon") {
        //======================== SUODATUS ALOITUSVIESTI ======================
        // Suodatus liittyen aloitusviestiin:
        $aloitushenkilon_id = $aloitusviesti->henkilo_id;
        // Jos aloittaja suodatetaan, palautetaan tyhjä merkkijono.
        if (Suodatin::henkilo_suodatetaan_kevyt($aloitushenkilon_id, $omaid, $suodattimet)) {
            return $palaute;
        }
        //======================================================================
        // Haetaan kaikki kommentit (joista vain osa näytetään, mutta
        // on hyvä tietää kommenttien kokonaislkm):
        $hakulause1 = "SELECT viestit.*\n                    FROM viestit\n                    WHERE emo_id = '" . $kesk_id . "'\n                    ORDER by tallennushetki_sek ASC";
        $viestihaku1 = $tietokantaolio->tee_OMAhaku($hakulause1);
        $viestitaulu1_kaikki = $tietokantaolio->hae_osumarivit_olioina($viestihaku1);
        //======================== SUODATUS KOMMENTIT ==========================
        $viestitaulu1 = array();
        // Tähän kerätään suodatetut.
        foreach ($viestitaulu1_kaikki as $viesti_tk) {
            $kirjoittaja_id = $viesti_tk->henkilo_id;
            if (!Suodatin::henkilo_suodatetaan_kevyt($kirjoittaja_id, $omaid, $suodattimet)) {
                array_push($viestitaulu1, $viesti_tk);
            }
        }
        //======================== SUODATUS ====================================
        $kommenttien_lkm = sizeof($viestitaulu1);
        // Jos vanhoja enemmän kuin näytetään, on piilotettavia:
        if ($kommenttien_lkm > $kiinni_lkm) {
            $on_piilotettavia = true;
        }
        // Muodostetaan uusi taulukko, johon kopioidaan aloitusviesti ja
        // sopiva määrä kommentteja oikeassa järjestyksessä:
        $kesk_viestit = array();
        array_push($kesk_viestit, $aloitusviesti);
        // Jos näytetään kaikki, kopsataan kaikki. Muuten vain sopiva osa.
        if ($auki) {
            foreach ($viestitaulu1 as $v) {
                array_push($kesk_viestit, $v);
            }
        } else {
            // Ei näytetä kaikkia:
            $alkuindeksi = 0;
            // Jos vanhoja enemmän kuin näytetään:
            if ($kommenttien_lkm > $kiinni_lkm) {
                $alkuindeksi = $kommenttien_lkm - $kiinni_lkm;
            }
            for ($i = $alkuindeksi; $i < sizeof($viestitaulu1); $i++) {
                $v2 = $viestitaulu1[$i];
                array_push($kesk_viestit, $v2);
            }
        }
        // Nyt meillä on aloitusviesti ja kommentit samassa taulukossa
        // oikeassa järjestyksessä ja päästään muotoilemaan viestien html:ää.
        for ($i = 0; $i < sizeof($kesk_viestit); $i++) {
            $nyk_olio = $kesk_viestit[$i];
            // Haetaan lähettäjän tiedot:
            $lahettaja = $tietokantaolio->hae_eka_osuma_oliona("henkilot", "id", $nyk_olio->henkilo_id);
            $on_valintaruutu = false;
            $saa_muokata = false;
            // Poiston salliminen. Kuninkaalla kaikki valta.
            if ($lahettaja !== "tuntematon" && $lahettaja->id === $oma_id && $nyk_olio->kommenttien_lkm < '1' || $kuningas) {
                // Valintaruutu sisältää vastaavan
                // tietokantarivin id:n, jotta se valittu rivi löydetään.
                $on_valintaruutu = true;
            }
            // Muokkauksen salliminen. Kuninkaalla kaikki valta.
            if ($lahettaja !== "tuntematon" && $lahettaja->id === $oma_id || $kuningas) {
                $saa_muokata = true;
            }
            // Muotoillaan lähettäjä mahdollistaen sen, että sitä ei löytynyt.
            if ($lahettaja !== "tuntematon") {
                $lahettaja = $lahettaja->etunimi;
            }
            // Luodaan uusi viestiolio (=taulukon eka viesti)):
            if ($i == 0) {
                $viesti = new Viesti($nyk_olio, false, false);
            } else {
                if ($i < sizeof($kesk_viestit) - 1) {
                    $viesti = new Viesti($nyk_olio, true, false);
                } else {
                    // Viimeinen viesti (uusin)
                    $viesti = new Viesti($nyk_olio, true, true);
                }
            }
            $mj .= $viesti->palauta_html($on_valintaruutu, $lahettaja, $kommenttien_lkm, $on_piilotettavia, $auki, $saa_muokata);
        }
        $palaute = $mj;
    }
    return $palaute;
}