/** 
 * Processes all jobs of a bot defined in config.php. 
 * @params
 *		$bot	:array, as defined in config.php
 * @returns nothing
 */
function process($bot)
{
    foreach ($bot['jobs'] as $job_label => $job) {
        $firstrun = !sizeof(get_logged_issues($job_label)) > 0;
        //Anything logged yet for this job?
        echo "\nProcessing job '{$job_label}'\n";
        echo "------------------------------------------------";
        $starting_id = get_last_initiative($job_label, $bot['starting_id']);
        //the bot's starting id is only used as fallback
        echo "[starting with initiative {$starting_id}]\n";
        if ($firstrun) {
            $event = array("issue_id" => -2, "initiative_id" => -2, "job" => $job_label);
            log_event($event);
            //initiatiate log table
            echo "First run for this job on this bot. No tweets will be sent.\n\n";
        }
        $query = $job['query'] . "&min_id=" . $starting_id;
        //make sure to get only recent initiatives
        $result = lf_query($bot['lf'], $query);
        //get all initiatives needed for the current job
        $job_labels = (array) $job['dont_retweet'];
        //this prevents issues beeing tweeted for multiple jobs
        $job_labels[] = $job_label;
        $logged_issues = get_logged_issues($job_labels);
        //events already twittered
        $todo = 0;
        //as of now there is no event to process
        $twittered = 0;
        //nothing has been twittered yet
        $new_event_found = false;
        //nothing new has been detected yet - suprise
        foreach ($result as $initiative) {
            log_and_flush();
            // Log and flush the output buffer :)
            if (in_array($initiative['issue_state'], (array) $job['states'])) {
                //process only those whose state is among those of interest
                $todo++;
                //one initiative found, so one more to do :)
                $issue_id = $initiative['issue_id'];
                //get the issue_id, that is NOT the initiative's id!
                $initiative_id = $initiative['id'];
                $event = array("issue_id" => $issue_id, "initiative_id" => $initiative_id, "job" => $job_label);
                //current event
                if (!in_array($issue_id, $logged_issues)) {
                    //dont tweet the same issue twice
                    $new_event_found = true;
                    echo "\n\tIssue {$initiative['issue_id']} has not yet been twittered for one of the following job(s): " . implode(', ', $job_labels) . ". ({$initiative_id})\n";
                    $url = get_issue_link($bot['lf'], $initiative);
                    echo "\t\tURL: {$url}\n";
                    if ($firstrun) {
                        $shorturl = true;
                    } else {
                        $shorturl = shortlink($url);
                        //bit.ly
                    }
                    if ($shorturl) {
                        //the url actually got shortened
                        echo "\t\tShortened URL: {$shorturl}\n";
                        $tweet = sprintf($job['format'], $bot['hashtag'], $shorturl, $issue_id);
                        echo "\t\tSending tweet: '{$tweet}'\n";
                        if ($firstrun) {
                            // Prevent the bot from tweeting on the first run, there'd be tons of old stuff otherwise
                            $done = true;
                            echo "\t\tNo tweets on first run.\n";
                        } else {
                            $done = twitter($bot['twitter'], $tweet);
                            //Here we go!
                        }
                        if ($done) {
                            log_event($event);
                            //keep this one in mind to not twitter it again in future runs for the same job
                            $logged_events[] = $event;
                            //keep this one in mind not to twitter it again this run
                            $twittered++;
                            //one more has been twittered
                            $todo--;
                            //this one is done :)
                        } else {
                            echo "\t\tAborted: unable to send tweet.\n";
                        }
                    } else {
                        echo "\t\tAborted: unable to shorten url.\n";
                    }
                } else {
                    $todo--;
                    //we dont have to deal with this one anymore
                    echo "\n\tIssue {$initiative['issue_id']} has already been twittered for one of the the following job(s): " . implode(', ', $job_labels) . ". ({$initiative_id})\n";
                }
            }
        }
        if (!$new_event_found) {
            echo "\n*No untwittered issues for job '{$job_label}'.\n\n";
        } else {
            echo "\n*{$twittered} issue(s) have been twittered for job '{$job_label}'.\n\n";
        }
        if ($todo > 0) {
            echo "\n*There are " . $todo . " initiative(s) left to process.\n\n";
        }
        echo "\n\n";
        log_and_flush();
        //Log and flush the output buffer :)
    }
}
foreach ($bots as $name => $bot) {
    log_this("––––––––––––  processing bot '{$name}'");
    echo "** BOT '{$name}' running \n*****************************\n";
    log_and_flush();
    //Log and flush the output buffer :)
    $db_events_table = $name . "_events";
    // every bot gets his own table to log events
    //clear_logged_events();			// reset the bot
    process($bot, !table_exists($db_events_table));
    /* 
    	If the events table does not exists nothing will be twittered.
    	This way old stuff wont be twittered in the first run. 
    	Instead the table is created and logs the old events.
    */
    summary_tweet($bot);
    //Daily summary.
    echo "\n\n\n\n";
    //print_table($db_events_table);	// shows all logged events for debugging
}
log_and_flush();
//Log and flush the output buffer for the last time
ob_end_clean();
//end output buffer
log_this("––––––––––––– done. ", $log);
//write the output of this script to the log table
mysql_close(DB);
?>