#include <iostream>

using namespace std;
class HotelskaRezervacija {
private:
    int denovi, lica;
    string ime;
    
public:
    HotelskaRezervacija() {}
    HotelskaRezervacija(int _denovi, int _lica, string _ime) {
        denovi = _denovi;
        lica = _lica;
        ime = _ime;
    }
    virtual int vratiCena() {
        return denovi * lica * 25;
    }
    virtual int vratiCena(int uplata) {
        if(uplata >= vratiCena()) {
            return uplata - vratiCena();
        }
        else {
            cout << "Ne se dovolno parite, treba da se plati: " << vratiCena() << endl;
            return -1;
        }
    }
    int get_lica() {
        return lica;
    }
    int get_denovi() {
        return denovi;
    }
};
class Polupansion : public HotelskaRezervacija {
private:
public:
    Polupansion() : HotelskaRezervacija(){}
    Polupansion(int _denovi, int _lica, string _ime) : HotelskaRezervacija(_denovi, _lica, _ime){
        
    }
    int vratiCena() override {
        return HotelskaRezervacija::vratiCena() + get_lica() * get_denovi() * 5;
    }
    int vratiCena(int uplata) override {
        if(uplata >= vratiCena()) {
            return uplata - vratiCena();
        }
        else {
            cout << "Treba da se plati: " << vratiCena() << endl;
            return -1;
        }
    }
};
class Hotel {
private:
    string ime;
    int saldo;
public:
    Hotel() {}
    Hotel(string _ime, int _saldo) {
        ime = _ime;
        saldo = _saldo;
        
    }
    void uplatiRezervacija(HotelskaRezervacija &hr, int uplata) {
        int cena = hr.vratiCena(uplata);
        if(cena == -1) {
            cout << "NE USPESNA REZERVACIJA" << endl;
        }
        else {
            cout << "USPESNA REZERVACIJA" << endl;
            cout << cena << endl;
            saldo += uplata;
        }
    }
};
int main() {
    HotelskaRezervacija *hr = new Polupansion(5, 5, "Josif");
    Hotel h("marriot", 0);
    h.uplatiRezervacija(*hr, 1000);
    
   return 0;
}
