<?php

/**
 * Importer takes parsed data and import it to DB
 *
 */
class Importer {

    public static $ipCache;
    public static $userCache;
    public static $user2Cache;
    public static $catalogCache;
    public static $distroCache;
    public static $configCache;
    private static $_cacheLoaded = false;
    private static $_source;
    private static $_packs;

    public static function import($row, $source) {
        //die(var_dump($row));
        self::$_source = $source;
        // load up catalogs, distros, configs to cache
        if (self::$_cacheLoaded == false) {
            self::loadCache();
        }
        // let's import that
        $ip = $row['ip'];
        $ts = $row['ts'];
        $path = $row['path'];
        $distro = $row['distro'];
        $user_id = $row['user_id'];
        $user2_id = $row['user2_id'];
        $response = $row['response'];
        $size = $row['size'];

        // resolve the catalog
        if (!self::$catalogCache[$path]) {
            Db::query("INSERT INTO catalogs (path, source) VALUES ('$path', '$source')");
            $catalogId = mysql_insert_id();
            self::$catalogCache[$path] = $catalogId;
        } else {
            $catalogId = self::$catalogCache[$path];
        }

        // resolve the distro
        if (preg_match('/(NB[A-Z]*)?_?([_A-Z]+)?/', $distro, $match)) {
            $distro_code = "";
            $config = "";
            $config_sig = 0;
            if (isset($match[1])) {
                $distro_code = $match[1];
            }
            if (isset($match[2])) {
                $config = $match[2];
                $config_parts = explode("_", $config);
                foreach ($config_parts as $part) {
                    if (isset(self::$_packs[$part])) {
                        $config_sig += self::$_packs[$part];
                    } else {
                        $warning_count++;
                        Logger::write(Logger::INFO, "Uknown pack ID: $part; $config; $distro_code");
                    }
                }
            }
        }
        if (!self::$distroCache[$distro_code]) {
            Db::query("INSERT INTO distros (distro) VALUES ('$distro_code')");
            $distroId = mysql_insert_id();
            self::$distroCache[$distro_code] = $distroId;
        } else {
            $distroId = self::$distroCache[$distro_code];
        }

        // resolve config
        if (!self::$configCache[$config]) {
            Db::query("INSERT INTO configs (config, signature) VALUES ('$config', $config_sig)");
            $configId = mysql_insert_id();
            self::$configCache[$config] = $configId;
        } else {
            $configId = self::$configCache[$config];
        }

        // resolve the IP address
//        if (!self::$ipCache[$ip]) {
//            // lookup db for it
//            $res = Db::query('SELECT id FROM ips WHERE ip="' . $ip . '" LIMIT 1');
//            if ($res) {
//                if (mysql_num_rows($res) > 0) {
//                    $row = mysql_fetch_assoc($res);
//                    $ipId = $row['id'];
//                    self::$ipCache[$ip] = $ipId;
//                } else {
//                    Db::query("INSERT INTO ips (ip, country) VALUES ('$ip' ,'" . getCCByIP($ip) . "')");
//                    $ipId = mysql_insert_id();
//                    self::$ipCache[$ip] = $ipId;
//                }
//            }
//        } else {
//            $ipId = self::$ipCache[$ip];
//        }
	$ipId=0;

        // resolve userId
        $tsInt = strtotime($ts);
        if (!self::$userCache[$user_id]) {
            $res = Db::query('SELECT id, since, last_seen FROM users WHERE unique_id="' . $user_id . '"');
            if ($res) {
                if (mysql_num_rows($res) > 0) {
                    $row = mysql_fetch_assoc($res);
                    $userId = $row['id'];
                    // if this ping is newer then one in DB, save it as last seen and calc delay
                    if ($tsInt > $row['last_seen']) {
                        // calc the delay since last ping
                        $delay = round(($tsInt - $row['last_seen']) / (60 * 60 * 24));
                        // update last seen and delay
                        if($delay>0) {
                            Db::query("UPDATE users SET last_seen=$tsInt, catalog_id=$catalogId, delay=$delay WHERE id=" . $userId);
                        }
                    }
                    self::$userCache[$user_id] = array('id' => $userId, 'since' => $row['since'], 'last_seen' => $tsInt, 'catalog_id' => $catalogId, 'delay' => $delay);
                } else {
                    Db::query("INSERT INTO users (unique_id, since, last_seen, catalog_id, delay) VALUES ('$user_id', '$ts', $tsInt, $catalogId, 9999)");
                    $userId = mysql_insert_id();
                    self::$userCache[$user_id] = array('id' => $userId, 'since' => $ts, 'last_seen' => $tsInt, 'catalog_id' => $catalogId, 'delay' => 9999);
                }
            }
        } else {
            $userId=self::$userCache[$user_id]['id'];
            // check if the hit from cache has newer timestamp, if so, mark user for update her timestamp
            if (self::$userCache[$user_id]['since'] > $ts) {
                $updateUsers = array('id' => self::$userCache[$user_id]['id'], 'since' => $ts);
            }
        }

        // resolve userId
        if (!self::$user2Cache[$user2_id]) {
            $res = Db::query('SELECT id, since, last_seen FROM users2 WHERE unique_id="' . $user2_id . '"');
            if ($res) {
                if (mysql_num_rows($res) > 0) {
                    $row = mysql_fetch_assoc($res);
                    $user2Id = $row['id'];
                    // if this ping is newer then one in DB, save it as last seen and calc delay
                    if ($tsInt > $row['last_seen']) {
                        // calc the delay since last ping
                        $delay = round(($tsInt - $row['last_seen']) / (60 * 60 * 24));
                        // update last seen and delay
                        if($delay>0) {
                            Db::query("UPDATE users2 SET last_seen=$tsInt, delay=$delay WHERE id=" . $user2Id);
                        }
                    }
                    self::$user2Cache[$user2_id] = array('id' => $user2Id, 'since' => $row['since'], 'last_seen' => $tsInt, 'delay' => $delay);
                } else {
                    Db::query("INSERT INTO users2 (unique_id, since, last_seen, delay) VALUES ('$user2_id', '$ts', $tsInt,9999)");
                    $user2Id = mysql_insert_id();
                    self::$user2Cache[$user2_id] = array('id' => $user2Id, 'since' => $ts, 'last_seen' => $tsInt, 'delay' => 9999);
                }
            }
        } else {
            $user2Id=self::$user2Cache[$user2_id]['id'];
            // check if the hit from cache has newer timestamp, if so, mark user for update her timestamp
            if (self::$user2Cache[$user2_id]['since'] > $ts) {
                $updateUsers2 = array('id' => self::$user2Cache[$user2_id]['id'], 'since' => $ts);
            }
        }


        // now save it to hits table finally
        $res = Db::query("INSERT INTO pings (ip_id, ts, path_id, distro_id, config_id, user_id, user2_id, response, size) VALUES ($ipId, '$ts', $catalogId, $distroId, $configId, $userId, $user2Id, $response, $size)");
        if ($res) {
            $ret = true;
        } else {
            $ret = false;
        }

        // now update users since timestamps (might be case if we back import older logs)
        if (!empty($updateUsers)) {
            foreach ($updateUsers as $u) {
                Db::query("UPDATE users SET since='" . $u['since'] . "' WHERE id=" . $u['id']);
            }
        }
        if (!empty($updateUsers2)) {
            foreach ($updateUsers2 as $u) {
                Db::query("UPDATE users2 SET since='" . $u['since'] . "' WHERE id=" . $u['id']);
            }
        }
        return $ret;
    }

    private function loadCache() {
        $memBeforeCache = memory_get_usage();
        $res = Db::query('SELECT id, path FROM catalogs WHERE source="' . self::$_source . '"');
        if ($res) {
            while ($r = mysql_fetch_assoc($res)) {
                self::$catalogCache[$r['path']] = $r['id'];
            }
        }
        $res = Db::query('SELECT id, config FROM configs');
        if ($res) {
            while ($r = mysql_fetch_assoc($res)) {
                self::$configCache[$r['config']] = $r['id'];
            }
        }
        $res = Db::query('SELECT id, distro FROM distros');
        if ($res) {
            while ($r = mysql_fetch_assoc($res)) {
                self::$distroCache[$r['distro']] = $r['id'];
            }
        }

        // log some stats on the memory usage so we know how is the cache expensive
        Logger::write(Logger::INFO, 'Caching distros, catalogs, configs took ' . round((memory_get_usage() - $memBeforeCache) / 1024000, 1) . 'MB');

        self::$_packs = array(
            'CND' => 0x0001,
            'CRE' => 0x0002,
            'ENT' => 0x0004,
            'MOB' => 0x0008,
            'PROF' => 0x0010,
            'CDC' => 0x0020,
            'CLDC' => 0x0040,
            'JAVA' => 0x0080,
            'JAVASE' => 0x0100,
            'JAVAEE' => 0x0200,
            'JAVAME' => 0x0400,
            'WEBEE' => 0x0800,
            'PROFILER' => 0x1000,
            'PHP' => 0x2000,
            'RUBY' => 0x4000,
            'MOBILITY' => 0x8000,
            'UML' => 0x10000,
            'SOA' => 0x20000,
            'GLASSFISH' => 0x40000,
            'SJSAS' => 0x80000,
            'TOMCAT' => 0x100000,
            'VISUALWEB' => 0x200000,
            'JDK' => 0x400000,
            'MYSQL' => 0x800000,
            'GROOVY' => 0x1000000,
            'GFMOD' => 0x2000000,
            'JAVAFX' => 0x4000000,
            'WEBCOMMON' => 0x8000000,
            'FX' => 0x10000000,
            'PY' => 0x20000000,
            'JC' => 0x40000000,
            'WEBLOGIC' => 0x80000000,
            'JAVAFXSDK' => 0x100000000,
            'NB' => 0x200000000,
            'EXTIDE' => 0x400000000
            );
self::$_cacheLoaded = true;
}

}

?>
