]> git.stg.codes - stg.git/blob - include/stg/tariff.h
Implemented daily fee charge with backward compatibility.
[stg.git] / include / stg / tariff.h
1 /*
2  *    This program is free software; you can redistribute it and/or modify
3  *    it under the terms of the GNU General Public License as published by
4  *    the Free Software Foundation; either version 2 of the License, or
5  *    (at your option) any later version.
6  *
7  *    This program is distributed in the hope that it will be useful,
8  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
9  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  *    GNU General Public License for more details.
11  *
12  *    You should have received a copy of the GNU General Public License
13  *    along with this program; if not, write to the Free Software
14  *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
15  */
16
17 /*
18  *    Author : Maxim Mamontov <faust@stargazer.dp.ua>
19  */
20
21 #ifndef TARIFF_H
22 #define TARIFF_H
23
24 #include "os_int.h"
25
26 #include <string>
27 #include <cstring>
28 #include <ctime>
29
30 struct TARIFF_DATA;
31
32 class TARIFF {
33 public:
34     enum PERIOD { DAY = 0, MONTH };
35
36     static std::string PeriodToString(PERIOD period);
37     static PERIOD StringToPeriod(const std::string& value);
38
39     virtual ~TARIFF() {}
40     virtual double  GetPriceWithTraffType(uint64_t up,
41                                           uint64_t down,
42                                           int dir,
43                                           time_t t) const = 0;
44     virtual double  GetFreeMb() const = 0;
45     virtual double  GetPassiveCost() const = 0;
46     virtual double  GetFee() const = 0;
47     virtual double  GetFree() const = 0;
48     virtual PERIOD  GetPeriod() const = 0;
49
50     virtual const   std::string & GetName() const = 0;
51     virtual void    SetName(const std::string & name) = 0;
52
53     virtual int     GetTraffType() const = 0;
54     virtual int64_t GetTraffByType(uint64_t up, uint64_t down) const = 0;
55     virtual int     GetThreshold(int dir) const = 0;
56     virtual const TARIFF_DATA & GetTariffData() const = 0;
57 };
58
59 inline
60 std::string TARIFF::PeriodToString(TARIFF::PERIOD period)
61 {
62 switch (period)
63     {
64     case DAY: return "day";
65     case MONTH: return "month";
66     }
67 return "month"; // Classic behaviour.
68 }
69
70 inline
71 TARIFF::PERIOD TARIFF::StringToPeriod(const std::string& value)
72 {
73 if (strcasecmp(value.c_str(), "day") == 0)
74     return DAY;
75 return MONTH; // Classic behaviour.
76 }
77
78 #endif