#include "BeamMonFileSummary.h"

#include <DatabaseInterface/DbiResultSet.h>
#include <DatabaseInterface/DbiOutRowStream.h>

#include <Validity/VldRange.h>

#include <TSystem.h>
#include <TSeqCollection.h>
#include <TIterator.h>
#include <TFile.h>


#include <vector>

using namespace std;

#include <MessageService/MsgService.h>
CVSID("$Id: BeamMonFileSummary.cxx,v 1.5 2006/01/30 20:04:09 rhatcher Exp $");

#include <DatabaseInterface/DbiResultPtr.tpl>
template class  DbiResultPtr<BeamMonFileSummary>;

BeamMonFileSummary::BeamMonFileSummary()
    : fFirstSpillTime()
    , fLastSpillTime()
    , fSpillCount(0)
    , fProtonCount(0)
    , fFileName("")
    , fFileSize(0)
    , fRootVersion(0)
    , fModTime()
{
}

void BeamMonFileSummary::Fill(DbiResultSet& rs, const DbiValidityRec* /*vrec*/)
{
    // nominally:
    // rs >> fField1 >> fField2;

    int ns=0;

    rs >> fFirstSpillTime;
    rs >> ns;
    fFirstSpillTime.Add(VldTimeStamp(0,ns));

    rs >> fLastSpillTime;
    rs >> ns;
    fLastSpillTime.Add(VldTimeStamp(0,ns));

    rs >> fSpillCount
       >> fProtonCount
       >> fTclkTriggerEvent
       >> fTclkTriggerDelay
       >> fFileName
       >> fFileSize
       >> fRootVersion
       >> fModTime;

}
DbiTableRow* BeamMonFileSummary::CreateTableRow() const 
{ 
    return new BeamMonFileSummary; 
}

void BeamMonFileSummary::SetTclkTrigger(int event, int delay)
{
    fTclkTriggerEvent = event;
    fTclkTriggerDelay = delay;
}

void BeamMonFileSummary::AddSpill(const VldTimeStamp& vts, double proton_count)
{
    if (!fSpillCount) {
	fFirstSpillTime = vts;
    }
    ++fSpillCount;

    fLastSpillTime = vts;
    fProtonCount += proton_count;
}

void BeamMonFileSummary::SetFileInfo(const TFile& file)
{
    fFileName = gSystem->BaseName(file.GetName());

    fFileSize = file.GetSize();
    fRootVersion = file.GetVersion();

    FileStat_t file_stat;
    gSystem->GetPathInfo(file.GetName(),file_stat);
    fModTime = VldTimeStamp(file_stat.fMtime,0);
}

void BeamMonFileSummary::Store(DbiOutRowStream& ors,
			       const DbiValidityRec* /*vrec*/) const
{
    ors << fFirstSpillTime;
    ors << (fFirstSpillTime.GetNanoSec())
	<< fLastSpillTime
	<< (fLastSpillTime.GetNanoSec())
	<< fSpillCount
	<< fProtonCount
	<< fTclkTriggerEvent
        << fTclkTriggerDelay
	<< fFileName
	<< fFileSize
	<< fRootVersion
	<< fModTime;
}

ClassImp(BeamMonFileSummary)
    
