#ifndef MARS_MJob
#define MARS_MJob

#ifndef MARS_MSequence
#include "MSequence.h"
#endif

class TEnv;
class MEvtLoop;

class MJob : public MParContainer
{
private:
    void FixPath(TString &path) const;

    TEnv     *fEnv;           // Resource file
    TString   fEnvPrefix;     // Prefix for resources
    Bool_t    fEnvDebug;      // Debug setup of resources

protected:

    TString   fPathOut;       // Directory to write output file to (eg. calib*.root)
    TString   fPathIn;        // Directory to read output from (eg. calib*.root)
    TString   fPathData;      // Directory to read  data files from (2004*.root)

    Bool_t    fOverwrite;     // Allow overwriting output files
    Int_t     fMaxEvents;     // Maximum number of events

    MSequence fSequence;      // Sequence

    Int_t       GetEnv(const char *name, Int_t dflt) const;
    Double_t    GetEnv(const char *name, Double_t dflt) const;
    const char *GetEnv(const char *name, const char *dflt) const;
    Bool_t      HasEnv(const char *name) const;

    Bool_t SetupEnv(MEvtLoop &loop) const;
    virtual Bool_t CheckEnv();

public:
    MJob(const char *name=NULL, const char *title=NULL);
    ~MJob();

    void   SetPathOut(const char *path=".");
    void   SetPathIn(const char *path=".");
    void   SetPathData(const char *path=".");

    void   SetOverwrite(Bool_t b=kTRUE) { fOverwrite=b; }
    Bool_t SetEnv(const char *env, const char *prefix=0);
    void   SetEnvDebug(Bool_t b=kTRUE) { fEnvDebug=b; }

    void   SetMaxEvents(Int_t max) { fMaxEvents = max; }
    void   SetSequence(const MSequence &seq) { fSequence = seq; }

    MStatusDisplay *GetDisplay() { return fDisplay; }

    ClassDef(MJob, 0) // Bas class for Jobs
};

#endif
