// deployer Module header
// Copyright (C) 2024 Jean-Cloud
// GNU General Public License v3

#if !defined(MODULE_H)
#define MODULE_H

#include <iostream>
#include "Service.h"

class Module 
{
    public:
    Module(){};
    //=0 means pure virtual method, making Module a pure virtual class
    virtual ~Module()=0; //make protected to ensure it is not used externally?
    virtual int Prepare ()=0;
    virtual int Deploy (string serviceUsername)=0;
    virtual int Remove(string serviceUsername)=0;
    virtual int Clean ()=0;
    friend ostream & operator<< (ostream & out, const Module & m);
    string name;
};
#endif