/*======================================================================
 FILE: ICalValue.java
 CREATOR: gnorman 01/10/02

 SPDX-FileCopyrightText: 2002, Critical Path
 SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0
======================================================================*/

package net.cp.jlibical;

public class ICalValue {
    /**
     * It's not typesafe, but it's simple to understand!
     */
    public interface ICalValueKind {
        // icalvalue_kind
        int ICAL_ANY_VALUE = 5000;
        int ICAL_BOOLEAN_VALUE = 5001;
        int ICAL_UTCOFFSET_VALUE = 5002;
        int ICAL_RECUR_VALUE = 5003;
        int ICAL_METHOD_VALUE = 5004;
        int ICAL_CALADDRESS_VALUE = 5005;
        int ICAL_PERIOD_VALUE = 5006;
        int ICAL_STATUS_VALUE = 5007;
        int ICAL_BINARY_VALUE = 5008;
        int ICAL_TEXT_VALUE = 5009;
        int ICAL_DATETIMEDATE_VALUE = 5010;
        int ICAL_DURATION_VALUE = 5011;
        int ICAL_DATETIMEPERIOD_VALUE = 5012;
        int ICAL_INTEGER_VALUE = 5013;
        int ICAL_TIME_VALUE = 5014;
        int ICAL_URI_VALUE = 5015;
        int ICAL_TRIGGER_VALUE = 5016;
        int ICAL_ATTACH_VALUE = 5017;
        int ICAL_CLASS_VALUE = 5018;
        int ICAL_FLOAT_VALUE = 5019;
        int ICAL_QUERY_VALUE = 5020;
        int ICAL_STRING_VALUE = 5021;
        int ICAL_TRANSP_VALUE = 5022;
        int ICAL_X_VALUE = 5023;
        int ICAL_DATETIME_VALUE = 5024;
        int ICAL_GEO_VALUE = 5025;
        int ICAL_DATE_VALUE = 5026;
        int ICAL_ACTION_VALUE = 5027;
        int ICAL_NO_VALUE = 5028;
    }

    /**
     * Constructor for ICalValue
     * @param obj c++ pointer
     */
    private ICalValue(long obj) {
        init(obj);
    }

    public ICalValue() {
        init();
    }

    public ICalValue(/* ICalValueKind */ int kind) {
        init(kind);
    }

    public ICalValue(/* ICalValueKind */ int kind, String str) {
        init(kind, str);
    }

    public native String as_ical_string();
    // public native boolean is_valid();
    public native /* ICalValueKind */ int isa();
    public native boolean isa_value(Object value);

    /* Special, non autogenerated value accessors */
    // void set_recur(struct icalrecurrencetype v);
    // struct icalrecurrencetype get_recur();

    public native void set_trigger(ICalTriggerType v);
    public native ICalTriggerType get_trigger();

    // void set_datetimeperiod(struct icaldatetimeperiodtype v);
    // struct icaldatetimeperiodtype get_datetimeperiod();

    // public native static /* ICalParameterXLicCompareType */ int compare(ICalValue a, ICalValue b);

    /* Convert enumerations */
    // public native static /* ICalValueKind */ int string_to_kind(String str);
    // public native String kind_to_string(/* ICalValueKind */ int kind);

    /* BOOLEAN */
    // public native int get_boolean();
    // public native void set_boolean(int v);

    /* UTC-OFFSET */
    // public native int get_utcoffset();
    // public native void set_utcoffset(int v);

    /* METHOD */
    public native /* ICalPropertyMethod */ int get_method();
    public native void set_method(/* ICalPropertyMethod */ int v);

    /* CAL-ADDRESS */
    // public native String get_caladdress();
    // public native void set_caladdress(String  v);

    /* PERIOD */
    // struct icalperiodtype get_period();
    // void set_period(struct icalperiodtype v);

    /* STATUS */
    // public native /* ICalPropertyStatus */ int get_status();
    // public native void set_status(/* ICalPropertyStatus */ int v);

    /* BINARY */
    // public native String get_binary();
    // public native void set_binary(String  v);

    /* TEXT */
    public native String get_text();
    public native void set_text(String v);

    /* DATE-TIME-DATE */
    // ICalTimeType get_datetimedate();
    // void set_datetimedate(ICalTimeType v);

    /* DURATION */
    public native ICalDurationType get_duration();
    public native void set_duration(ICalDurationType v);

    /* INTEGER */
    // public native int get_integer();
    // public native void set_integer(int v);

    /* TIME */
    // ICalTimeType get_time();
    // void set_time(ICalTimeType v);

    /* URI */
    // public native String get_uri();
    // public native void set_uri(String  v);

    /* CLASS */
    // public native /* ICalPropertyClass */ int get_class();
    // public native void set_class(/* ICalPropertyClass */ int v);

    /* FLOAT */
    // public native float get_float();
    // public native void set_float(float v);

    /* QUERY */
    public native String get_query();
    public native void set_query(String v);

    /* STRING */
    // public native String get_string();
    // public native void set_string(String  v);

    /* TRANSP */
    // public native /* ICalPropertyTransp */ int get_transp();
    // public native void set_transp(/* ICalPropertyTransp */ int v);

    /* DATE-TIME */
    public native ICalTimeType get_datetime();
    public native void set_datetime(ICalTimeType v);

    /* GEO */
    // struct icalgeotype get_geo();
    // void set_geo(struct icalgeotype v);

    /* DATE */
    // ICalTimeType get_date();
    // void set_date(ICalTimeType v);

    /* ACTION */
    public native /* ICalPropertyAction */ int get_action();
    public native void set_action(/* ICalPropertyAction */ int v);

    /**
     * init the native class
     */
    private void init(long obj) {
        m_Obj = obj;
    }

    private native void init();
    private native void init(/* ICalValueKind */ int kind, String str);
    private native void init(/* ICalValueKind */ int kind);

    /**
     * load the jni library for this class
     */
    static {
        System.loadLibrary("ical_jni");
    }

    public static void main(String[] args) {
        System.out.println("*** ICalValue main called ok.");
    }

    /**
     * pointer to C++ object
     */
    private long m_Obj = 0;
}
