/***************************************************************************
 *   Copyright (C) 2009 by                                                 *
 *   Joris Guisson <joris.guisson@gmail.com>                               *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.          *
 ***************************************************************************/
#include "torrentstats.h"
#include <klocalizedstring.h>
#include <util/functions.h>

namespace bt
{
TorrentStats::TorrentStats()
    : imported_bytes(0)
    , bytes_downloaded(0)
    , bytes_uploaded(0)
    , bytes_left(0)
    , bytes_left_to_download(0)
    , total_bytes(0)
    , total_bytes_to_download(0)
    , download_rate(0)
    , upload_rate(0)
    , num_peers(0)
    , num_chunks_downloading(0)
    , total_chunks(0)
    , num_chunks_downloaded(0)
    , num_chunks_excluded(0)
    , num_chunks_left(0)
    , chunk_size(0)
    , seeders_total(0)
    , seeders_connected_to(0)
    , leechers_total(0)
    , leechers_connected_to(0)
    , status(NOT_STARTED)
    , session_bytes_downloaded(0)
    , session_bytes_uploaded(0)
    , running(false)
    , started(false)
    , queued(false)
    , autostart(false)
    , stopped_by_error(false)
    , completed(false)
    , paused(false)
    , auto_stopped(false)
    , superseeding(false)
    , qm_can_start(false)
    , multi_file_torrent(false)
    , priv_torrent(false)
    , max_share_ratio(0.0f)
    , max_seed_time(0.0f)
    , num_corrupted_chunks(0)
{
    last_download_activity_time = last_upload_activity_time = bt::CurrentTime();
}

float TorrentStats::shareRatio() const
{
    if (bytes_downloaded == 0)
        return 0.0f;
    else
        return (float)bytes_uploaded / (bytes_downloaded /*+ stats.imported_bytes*/);
}

bool TorrentStats::overMaxRatio() const
{
    return (completed && max_share_ratio > 0) && (shareRatio() - max_share_ratio > 0.00001);
}

QString TorrentStats::statusToString() const
{
    switch (status) {
    case NOT_STARTED:
        return i18n("Not started");
    case DOWNLOAD_COMPLETE:
        return i18n("Download completed");
    case SEEDING_COMPLETE:
        return i18n("Seeding completed");
    case SEEDING:
        return i18nc("Status of a torrent file", "Seeding");
    case DOWNLOADING:
        return i18n("Downloading");
    case STALLED:
        return i18n("Stalled");
    case STOPPED:
        return i18n("Stopped");
    case ERROR:
        return i18n("Error: %1", error_msg);
    case ALLOCATING_DISKSPACE:
        return i18n("Allocating diskspace");
    case QUEUED:
        return completed ? i18n("Queued for seeding") : i18n("Queued for downloading");
    case CHECKING_DATA:
        return i18n("Checking data");
    case NO_SPACE_LEFT:
        return i18n("Stopped. No space left on device.");
    case PAUSED:
        return i18n("Paused");
    case SUPERSEEDING:
        return i18n("Superseeding");
    default:
        return QString();
    }
}
}
