/*
 * Copyright 2004,2005 The Apache Software Foundation.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
  
#ifndef AXIS2_DATE_TIME_H
#define AXIS2_DATE_TIME_H

#include <axis2_utils_defines.h>
#include <axis2_env.h>
 
/**
 * @file axis2_date_time.h
 * @brief axis2-util base64 encoding holder
 */

#ifdef __cplusplus
extern "C"
{
#endif
   
/** 
 * @defgroup axis2_base64 Base64 encoding holder
 * @ingroup axis2_util
 * @{
 */    
 

typedef struct axis2_date_time_ops axis2_date_time_ops_t;   
typedef struct axis2_date_time axis2_date_time_t;

 struct axis2_date_time_ops
{
   /**
    * free the axis2_date_time.
    * @param date_time represet the type object
    * @param env pointer to environment struct. MUST NOT be NULL
    * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
    */
    axis2_status_t (AXIS2_CALL * 
    free)(axis2_date_time_t *date_time,
            const axis2_env_t *env);
    
   /**
    * store the time value from plain text.
    * @param date_time represet the type object
    * @param env pointer to environment struct. MUST NOT be NULL
    * @param time time as a string format HH:MM:TTZ
    * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
    */
    axis2_status_t (AXIS2_CALL *
    deserialize_time) (axis2_date_time_t *date_time,
                        const axis2_env_t *env,
                        const char* time_str);
    
   /**
    * store the date value from plain text.
    * @param date_time represet the type object
    * @param env pointer to environment struct. MUST NOT be NULL
    * @param date date as a string format YYYY-MM-DD
    * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
    */
    axis2_status_t (AXIS2_CALL *
    deserialize_date) (axis2_date_time_t *date_time,
                        const axis2_env_t *env,
                        const char* date_str);
    
   /**
    * store the date value from plain text.
    * @param date_time represet the type object
    * @param env pointer to environment struct. MUST NOT be NULL
    * @param date_time string format YYYY-MM-DDTHH:MM:SSZ
    * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
    */
    axis2_status_t (AXIS2_CALL *
    deserialize_date_time) (axis2_date_time_t *date_time,
                        const axis2_env_t *env,
                        const char* date_time_str);
    
   /**
    * store the date value from set of values
    * @param date_time represet the type object
    * @param env pointer to environment struct. MUST NOT be NULL
    * @param year Integer -1 can be used to ignore
    * @param month Integer -1 can be used to ignore
    * @param date Integer -1 can be used to ignore
    * @param hour Integer -1 can be used to ignore
    * @param min Integer -1 can be used to ignore
    * @param second Integer -1 can be used to ignore
    * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
    */
    axis2_status_t (AXIS2_CALL*
    set_date_time ) (axis2_date_time_t* date_time,
                        const axis2_env_t *env,
                        int year, int month, int date,
                        int hour, int min, int second );
 
   /**
    * retrive the stored time  as a string
    * @param date_time represet the type object
    * @param env pointer to environment struct. MUST NOT be NULL
    * @return time as a string format HH:MM:SSZ
    */
    char* (AXIS2_CALL *
    serialize_time) (axis2_date_time_t *date_time,
                        const axis2_env_t *env );
  
   /**
    * retrive the stored date as a string
    * @param date_time represet the type object
    * @param env pointer to environment struct. MUST NOT be NULL
    * @return date as a string  format YYYY-MM-DD
    */
    char* (AXIS2_CALL *
    serialize_date) (axis2_date_time_t *date_time,
                        const axis2_env_t *env );
   
   /**
    * retrive the stored date time  as a string
    * @param date_time represet the type object
    * @param env pointer to environment struct. MUST NOT be NULL
    * @return time as a string format YYYY-MM-DDTHH:MM:SSZ
    */
    char* (AXIS2_CALL *
    serialize_date_time) (axis2_date_time_t *date_time,
                        const axis2_env_t *env );
   
   /**
    * retrieve the year of the date time
    * @param date_time represet the type object
    * @param env pointer to environment struct. MUST NOT be NULL
    * @return year as an integer 
    */
    int (AXIS2_CALL *
    get_year)(axis2_date_time_t *date_time,
                        const axis2_env_t *env );
    
   /**
    * retrieve the month of the date time
    * @param date_time represet the type object
    * @param env pointer to environment struct. MUST NOT be NULL
    * @return month as an integer 
    */
    int (AXIS2_CALL *
    get_month)(axis2_date_time_t *date_time,
                        const axis2_env_t *env );
    
   /**
    * retrieve the date of the date time
    * @param date_time represet the type object
    * @param env pointer to environment struct. MUST NOT be NULL
    * @return date as an integer 
    */
    int (AXIS2_CALL *
    get_date)(axis2_date_time_t *date_time,
                        const axis2_env_t *env );
    
   /**
    * retrieve the hour of the date time
    * @param date_time represet the type object
    * @param env pointer to environment struct. MUST NOT be NULL
    * @return hour as an integer 
    */
    int (AXIS2_CALL *
    get_hour)(axis2_date_time_t *date_time,
                        const axis2_env_t *env );
    
   /**
    * retrieve the minute of the date time
    * @param date_time represet the type object
    * @param env pointer to environment struct. MUST NOT be NULL
    * @return minute as an integer 
    */
    int (AXIS2_CALL *
    get_minute)(axis2_date_time_t *date_time,
                        const axis2_env_t *env );
    
   /**
    * retrieve the second of the date time
    * @param date_time represet the type object
    * @param env pointer to environment struct. MUST NOT be NULL
    * @return second as an integer 
    */
    int (AXIS2_CALL *
    get_second)(axis2_date_time_t *date_time,
                        const axis2_env_t *env );
    
    
} ;

 struct axis2_date_time 
{
    axis2_date_time_ops_t *ops;
};

/**
 * Creates axis2_date_time struct with current date time
 * @param env double pointer to environment struct. MUST NOT be NULL
 * @return pointer to newly created axis2_date_time struct
 */
AXIS2_EXTERN axis2_date_time_t * AXIS2_CALL
axis2_date_time_create(const axis2_env_t *env );

/*
 * Creates axis2_date_time struct with an additional offset value
 * If the offset is a positive value then the time will be in the future 
 *        offset is 0, then the time will be the current time
 *        offset is a negative value then the time is in the past.
 * @param env double pointer to environment struct. MUST NOT be NULL
 * @param offset the offset from the current time in seconds
 * @return pointer to newly created axis2_date_time struct
 **/
AXIS2_EXTERN axis2_date_time_t * AXIS2_CALL
axis2_date_time_create_with_offset (const axis2_env_t *env, int offset);

/*************************** Function macros **********************************/

#define AXIS2_DATE_TIME_FREE(date_time, env) \
        ((date_time)->ops->free (date_time, env))

#define AXIS2_DATE_TIME_DESERIALIZE_TIME(date_time, env, time ) \
        ((date_time)->ops->deserialize_time (date_time, env, time))

#define AXIS2_DATE_TIME_DESERIALIZE_DATE(date_time, env, date) \
        ((date_time)->ops->deserialize_date (date_time, env, date_str))

#define AXIS2_DATE_TIME_DESERIALIZE_DATE_TIME(date_time, env, date_time_str ) \
        ((date_time)->ops->deserialize_date_time(date_time, env, date_time_str))

#define AXIS2_DATE_TIME_SET_DATE_TIME(date_time, env, \
                           year, month, date, hour, min, second ) \
        ((date_time)->ops->set_date_time (date_time, env, \
                           year, month, date, hour, min, second ) )
 
#define AXIS2_DATE_TIME_SERIALIZE_TIME(date_time, env) \
        ((date_time)->ops->serialize_time (date_time, env ) )
                              
#define AXIS2_DATE_TIME_SERIALIZE_DATE(date_time, env) \
        ((date_time)->ops->serialize_date (date_time, env ) )

#define AXIS2_DATE_TIME_SERIALIZE_DATE_TIME(date_time, env) \
        ((date_time)->ops->serialize_date_time (date_time, env ) )

#define AXIS2_DATE_TIME_GET_YEAR(date_time, env) \
        ((date_time)->ops->get_year(date_time, env ) )

#define AXIS2_DATE_TIME_GET_MONTH(date_time, env) \
        ((date_time)->ops->get_month(date_time, env ) )

#define AXIS2_DATE_TIME_GET_DATE(date_time, env) \
        ((date_time)->ops->get_date(date_time, env ) )

#define AXIS2_DATE_TIME_GET_HOUR(date_time, env) \
        ((date_time)->ops->get_hour(date_time, env ) )

#define AXIS2_DATE_TIME_GET_MINUTE(date_time, env) \
        ((date_time)->ops->get_minute(date_time, env ) )

#define AXIS2_DATE_TIME_GET_SECOND(date_time, env) \
        ((date_time)->ops->get_second(date_time, env ) )


/** @} */

#ifdef __cplusplus
}
#endif

#endif /* AXIS2_DATE_TIME_H */
