#!/bin/bash

# Konfigurace
CSV_DIR="/mnt/logs"
DB_NAME="mar"
DB_USER="pavlat"  # Upravte dle vašeho nastavení
DB_PASSWORD="//frpavl123"      # Nastavte heslo nebo použijte .pgpass
LOG_FILE="/var/www/bps/log/trends_import_plyn.log"
STATE_FILE="/var/lib/trends_import/last_import.state"

# Nactení aktuálního roku z tabulky setup
CURRENT_YEAR=$(psql -d "$DB_NAME" -U "$DB_USER" -t -c "SELECT arok FROM setup LIMIT 1;" | tr -d ' ')

if [ -z "$CURRENT_YEAR" ]; then
    echo "[$(date)] ERROR: Nepodarilo se nacíst aktuální rok z tabulky setup" >> "$LOG_FILE"
    exit 1
fi

# Funkce pro logování
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}

# Funkce pro vytvorení tabulky pro daný rok, pokud neexistuje
create_table_if_not_exists() {
    local year=$1
    local table_name="trends_plyn_${year}"
    
    psql -d "$DB_NAME" -U "$DB_USER" -t -c "
        CREATE TABLE IF NOT EXISTS ${table_name} (
            id BIGSERIAL PRIMARY KEY,
            datum DATE NOT NULL,
            cas TIME NOT NULL,
            pf_o2 NUMERIC(10,3),
            pf_h2s NUMERIC(10,3),
            pf_ch4 NUMERIC(10,3),
            f_o2 NUMERIC(10,3),
            f_h2s NUMERIC(10,3),
            f_ch4 NUMERIC(10,3),
            kgj_o2 NUMERIC(10,3),
            kgj_h2s NUMERIC(10,3),
            kgj_ch4 NUMERIC(10,3),
            created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
            UNIQUE(datum, cas)
        );
        
        CREATE INDEX IF NOT EXISTS idx_${table_name}_datum_cas ON ${table_name}(datum, cas);
    " 2>> "$LOG_FILE"
    
    if [ $? -eq 0 ]; then
        log "Tabulka ${table_name} pripravena"
    else
        log "CHYBA: Vytvorení tabulky ${table_name} selhalo"
        return 1
    fi
}

# Funkce pro zpracování jednoho CSV souboru
process_csv_file() {
    local csv_file=$1
    local file_mtime=$(stat -c %Y "$csv_file")
    
    # Kontrola, zda byl soubor již zpracován
    if [ -f "$STATE_FILE" ]; then
        local last_mtime=$(grep "^$(basename "$csv_file")=" "$STATE_FILE" | cut -d'=' -f2)
        if [ -n "$last_mtime" ] && [ "$file_mtime" -le "$last_mtime" ]; then
            log "Soubor $(basename "$csv_file") již byl zpracován, preskoceno"
            return 0
        fi
    fi
    
    log "Zpracovávám soubor: $(basename "$csv_file")"
    
    # Vytvorení docasného souboru pro transformovaná data
    local temp_file=$(mktemp)
    
    # Transformace CSV z rádkového formátu na sloupcový
    # Používáme awk pro prevod
    awk -F';' '
    BEGIN {
        OFS=";"
        # Odstranení uvozovek z hlavicky
        gsub(/"/, "", $0)
    }
    NR > 1 {
        # Odstranení uvozovek z hodnot
        gsub(/"/, "", $0)
        
        # Extrakce promenné a hodnoty
        split($1, var_parts, "\\")
        var_name = var_parts[length(var_parts)]
        
        # Extrakce data a casu
        split($2, datetime, " ")
        datum = datetime[1]
        cas = datetime[2]
        
        # Prevod cárky na tecku u desetinných císel
        gsub(/,/, ".", $3)
        hodnota = $3
        
        # Uložení do pole
        key = datum "|" cas
        data[key]["datum"] = datum
        data[key]["cas"] = cas
        data[key][var_name] = hodnota
    }
    END {
        # Výpis transformovaných dat
        for (k in data) {
            printf "%s;%s;%s;%s;%s;%s;%s;%s;%s;%s\n",
                data[k]["datum"],
                data[k]["cas"],
                (data[k]["PF_O2_Analyzator_Plynu"] != "" ? data[k]["PF_O2_Analyzator_Plynu"] : "NULL"),
                (data[k]["PF_H2S_Analyzator_Plynu"] != "" ? data[k]["PF_H2S_Analyzator_Plynu"] : "NULL"),
                (data[k]["PF_CH4_Analyzator_Plynu"] != "" ? data[k]["PF_CH4_Analyzator_Plynu"] : "NULL"),
                (data[k]["F_O2_Analyzator_Plynu"] != "" ? data[k]["F_O2_Analyzator_Plynu"] : "NULL"),
                (data[k]["F_H2S_Analyzator_Plynu"] != "" ? data[k]["F_H2S_Analyzator_Plynu"] : "NULL"),
                (data[k]["F_CH4_Analyzator_Plynu"] != "" ? data[k]["F_CH4_Analyzator_Plynu"] : "NULL"),
                (data[k]["KGJ_O2_Analyzator_Plynu"] != "" ? data[k]["KGJ_O2_Analyzator_Plynu"] : "NULL"),
                (data[k]["KGJ_H2S_Analyzator_Plynu"] != "" ? data[k]["KGJ_H2S_Analyzator_Plynu"] : "NULL"),
                (data[k]["KGJ_CH4_Analyzator_Plynu"] != "" ? data[k]["KGJ_CH4_Analyzator_Plynu"] : "NULL")
        }
    }
    ' "$csv_file" > "$temp_file"
    
    if [ ! -s "$temp_file" ]; then
        log "Soubor $(basename "$csv_file") neobsahuje žádná data ke zpracování"
        rm -f "$temp_file"
        return 0
    fi
    
    # Zjištení roku z dat (první rádek)
    first_datum=$(head -1 "$temp_file" | cut -d';' -f1)
    first_year=$(date -d "$first_datum" +%Y 2>/dev/null)
    
    if [ -z "$first_year" ]; then
        log "CHYBA: Nelze urcit rok z dat v souboru $(basename "$csv_file")"
        rm -f "$temp_file"
        return 1
    fi
    
    # Vytvorení tabulky pro daný rok
    create_table_if_not_exists "$first_year"
    
    # Import dat do databáze
    local table_name="trends_plyn_${first_year}"
    
    psql -d "$DB_NAME" -U "$DB_USER" -c "
        BEGIN;
        
        -- Vytvorení docasné tabulky pro data
        CREATE TEMP TABLE temp_import (
            datum DATE,
            cas TIME,
            pf_o2 NUMERIC,
            pf_h2s NUMERIC,
            pf_ch4 NUMERIC,
            f_o2 NUMERIC,
            f_h2s NUMERIC,
            f_ch4 NUMERIC,
            kgj_o2 NUMERIC,
            kgj_h2s NUMERIC,
            kgj_ch4 NUMERIC
        );
        
        -- Kopírování dat z CSV
        COPY temp_import FROM STDIN WITH (FORMAT csv, DELIMITER ';', NULL 'NULL');
        
        -- Vložení dat s rešením konfliktu
        INSERT INTO ${table_name} (datum, cas, pf_o2, pf_h2s, pf_ch4, f_o2, f_h2s, f_ch4, kgj_o2, kgj_h2s, kgj_ch4)
        SELECT datum, cas, pf_o2, pf_h2s, pf_ch4, f_o2, f_h2s, f_ch4, kgj_o2, kgj_h2s, kgj_ch4
        FROM temp_import
        ON CONFLICT (datum, cas) DO UPDATE SET
            pf_o2 = EXCLUDED.pf_o2,
            pf_h2s = EXCLUDED.pf_h2s,
            pf_ch4 = EXCLUDED.pf_ch4,
            f_o2 = EXCLUDED.f_o2,
            f_h2s = EXCLUDED.f_h2s,
            f_ch4 = EXCLUDED.f_ch4,
            kgj_o2 = EXCLUDED.kgj_o2,
            kgj_h2s = EXCLUDED.kgj_h2s,
            kgj_ch4 = EXCLUDED.kgj_ch4;
        
        DROP TABLE temp_import;
        COMMIT;
    " < "$temp_file" 2>> "$LOG_FILE"
    
    if [ $? -eq 0 ]; then
        log "Úspešne importováno $(wc -l < "$temp_file") záznamu do tabulky ${table_name}"
        # Uložení timestampu zpracování
        echo "$(basename "$csv_file")=$file_mtime" >> "$STATE_FILE"
    else
        log "CHYBA: Import dat z $(basename "$csv_file") selhal"
        rm -f "$temp_file"
        return 1
    fi
    
    rm -f "$temp_file"
    return 0
}

# Hlavní smycka
log "=== ZACÁTEK IMPORTU ==="

# Vytvorení adresáre pro state soubor, pokud neexistuje
mkdir -p "$(dirname "$STATE_FILE")"

# Zpracování všech CSV souboru
for csv_file in "$CSV_DIR"/Trends_Analizator_Plynu*.csv; do
    if [ -f "$csv_file" ]; then
        process_csv_file "$csv_file"
    fi
done

log "=== KONEC IMPORTU ==="