// -*- mode: cpp; mode: fold -*-
// Description								/*{{{*/
// $Id: debindexfile.h,v 1.3.2.1 2003/12/24 23:09:17 mdz Exp $
/* ######################################################################

   Debian Index Files
   
   There are three sorts currently
   
   Package files that have File: tags
   Package files that don't (/var/lib/dpkg/status)
   Source files
   
   ##################################################################### */
									/*}}}*/
#ifndef PKGLIB_DEBINDEXFILE_H
#define PKGLIB_DEBINDEXFILE_H

#include <apt-pkg/indexfile.h>
#include <apt-pkg/cacheiterators.h>
#include <apt-pkg/pkgcache.h>
#include <apt-pkg/srcrecords.h>

#include <string>

class OpProgress;
class pkgAcquire;
class pkgCacheGenerator;


class debStatusIndex : public pkgIndexFile
{
   /** \brief dpointer placeholder (for later in case we need it) */
   void *d;

   protected:
   std::string File;

   public:

   virtual const Type *GetType() const APT_CONST;
   
   // Interface for acquire
   virtual std::string Describe(bool /*Short*/) const {return File;};
   
   // Interface for the Cache Generator
   virtual bool Exists() const;
   virtual bool HasPackages() const {return true;};
   virtual unsigned long Size() const;
   virtual bool Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const;
   bool Merge(pkgCacheGenerator &Gen,OpProgress *Prog, unsigned long const Flag) const;
   virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;

   debStatusIndex(std::string File);
   virtual ~debStatusIndex() {};
};
    
class debPackagesIndex : public pkgIndexFile
{
   /** \brief dpointer placeholder (for later in case we need it) */
   void *d;

   std::string URI;
   std::string Dist;
   std::string Section;
   std::string Architecture;

   std::string Info(const char *Type) const;
   std::string IndexFile(const char *Type) const;
   std::string IndexURI(const char *Type) const;
   
   public:
   
   virtual const Type *GetType() const APT_CONST;

   // Stuff for accessing files on remote items
   virtual std::string ArchiveInfo(pkgCache::VerIterator Ver) const;
   virtual std::string ArchiveURI(std::string File) const {return URI + File;};
   
   // Interface for acquire
   virtual std::string Describe(bool Short) const;   
   
   // Interface for the Cache Generator
   virtual bool Exists() const;
   virtual bool HasPackages() const {return true;};
   virtual unsigned long Size() const;
   virtual bool Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const;
   virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;

   debPackagesIndex(std::string const &URI, std::string const &Dist, std::string const &Section,
			bool const &Trusted, std::string const &Arch = "native");
   virtual ~debPackagesIndex() {};
};

class debTranslationsIndex : public pkgIndexFile
{
   /** \brief dpointer placeholder (for later in case we need it) */
   void *d;

   std::string URI;
   std::string Dist;
   std::string Section;
   const char * const Language;
   
   std::string Info(const char *Type) const;
   std::string IndexFile(const char *Type) const;
   std::string IndexURI(const char *Type) const;

   inline std::string TranslationFile() const {return std::string("Translation-").append(Language);};

   public:
   
   virtual const Type *GetType() const APT_CONST;

   // Interface for acquire
   virtual std::string Describe(bool Short) const;   
   virtual bool GetIndexes(pkgAcquire *Owner) const;
   
   // Interface for the Cache Generator
   virtual bool Exists() const;
   virtual bool HasPackages() const;
   virtual unsigned long Size() const;
   virtual bool Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const;
   virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;

   debTranslationsIndex(std::string URI,std::string Dist,std::string Section, char const * const Language);
   virtual ~debTranslationsIndex() {};
};

class debSourcesIndex : public pkgIndexFile
{
   /** \brief dpointer placeholder (for later in case we need it) */
   void *d;

   std::string URI;
   std::string Dist;
   std::string Section;

   std::string Info(const char *Type) const;
   std::string IndexFile(const char *Type) const;
   std::string IndexURI(const char *Type) const;
   
   public:

   virtual const Type *GetType() const APT_CONST;

   // Stuff for accessing files on remote items
   virtual std::string SourceInfo(pkgSrcRecords::Parser const &Record,
			     pkgSrcRecords::File const &File) const;
   virtual std::string ArchiveURI(std::string File) const {return URI + File;};
   
   // Interface for acquire
   virtual std::string Describe(bool Short) const;   

   // Interface for the record parsers
   virtual pkgSrcRecords::Parser *CreateSrcParser() const;
   
   // Interface for the Cache Generator
   virtual bool Exists() const;
   virtual bool HasPackages() const {return false;};
   virtual unsigned long Size() const;
   
   debSourcesIndex(std::string URI,std::string Dist,std::string Section,bool Trusted);
   virtual ~debSourcesIndex() {};
};

#endif