#ifndef TARIFF_DAILY_TICKET_H_INCLUDED
#define TARIFF_DAILY_TICKET_H_INCLUDED

#include <QString>
#include <QDateTime>
#include <QDebug>
#include <QDebugStateSaver>


#include "tariff_customer.h"
#include "tariff_time_range.h"
#include "tariff_timebase.h"

struct ATBDailyTicket {
    ATBDailyTicket() = default;

    int daily_ticket_payment_option_id;
    int daily_ticket_unit_id;
    double daily_ticket_price;

    ATBTimeBase::TimeBaseType daily_ticket_tbase_type;
                                        // time base setting for ticket:
                                        // absolute: using time stamps
                                        // relative: use offsets from
                                        //    some reference time point,
                                        //    typically "start time".

    ATBCustomer::CustomerType daily_ticket_clearance_customer_type;
                                        // who is allowed to buy the ticket:
                                        // list of customer types

    int daily_ticket_weekday_range;  // [mon-sun]
    int daily_ticket_special_day_range;


    friend QDebug operator<<(QDebug debug, ATBDailyTicket const &ticket) {
        QDebugStateSaver saver(debug);

        debug.nospace()
                << "      daily_ticket_payment_option_id: " << ticket.daily_ticket_payment_option_id << "\n"
                << "                daily_ticket_unit_id: " << ticket.daily_ticket_unit_id << "\n"
                << "                  daily_ticket_price: " << ticket.daily_ticket_price << "\n";

        switch(ticket.daily_ticket_tbase_type) {
        case ATBTimeBase::TimeBaseType::ABSOLUTE:
            debug.nospace()
                << "             daily_ticket_tbase_type: " << "TimeBaseType::ABSOLUTE" << "\n";
            break;
        case ATBTimeBase::TimeBaseType::RELATIVE:
            debug.nospace()
                << "             daily_ticket_tbase_type: " << "TimeBaseType::RELATIVE" << "\n";
            break;
        }

        switch(ticket.daily_ticket_clearance_customer_type) {
        case ATBCustomer::CustomerType::ADULT:
            debug.nospace()
                << "daily_ticket_clearance_customer_type: " << "CustomerType::ADULT" << "\n";
            break;
        case ATBCustomer::CustomerType::CHILD:
            debug.nospace()
                << "daily_ticket_clearance_customer_type: " << "CustomerType::CHILD" << "\n";
            break;
        case ATBCustomer::CustomerType::TEEN:
            debug.nospace()
                << "daily_ticket_clearance_customer_type: " << "CustomerType::TEEN" << "\n";
            break;
        default:
            debug.nospace()
                << "daily_ticket_clearance_customer_type: " << "CustomerType::???" << "\n";
            break;
        }

        debug.nospace()
            << "          daily_ticket_weekday_range: " << ticket.daily_ticket_weekday_range << "\n"
            << "      daily_ticket_special_day_range: " << ticket.daily_ticket_special_day_range << "\n";

        return debug;
    }
};

#endif // TARIFF_DAILY_TICKET_H_INCLUDED