/*
  Copyright (C) 2000-2005 SKYRIX Software AG

  This file is part of SOPE.

  SOPE is free software; you can redistribute it and/or modify it under
  the terms of the GNU Lesser General Public License as published by the
  Free Software Foundation; either version 2, or (at your option) any
  later version.

  SOPE is distributed in the hope that it will be useful, but WITHOUT ANY
  WARRANTY; without even the implied warranty of MERCHANTABILITY or
  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
  License for more details.

  You should have received a copy of the GNU Lesser General Public
  License along with SOPE; see the file COPYING.  If not, write to the
  Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
  02111-1307, USA.
*/

#ifndef __NGCards_iCalEntityObject_H__
#define __NGCards_iCalEntityObject_H__

#import "CardGroup.h"

/*
  iCalEntityObject
  
  This is a common base class for tasks and appointments which share a lot of
  attributes.
*/

@class NSCalendarDate, NSMutableArray, NSString, NSArray, NSNumber;
@class iCalPerson;
@class NSURL;

typedef enum
{
  iCalAccessPublic = 0,
  iCalAccessPrivate = 1,
  iCalAccessConfidential = 2,
  iCalAccessClassCount = 3
} iCalAccessClass;

@interface iCalEntityObject : CardGroup

/* accessors */

- (void) setUid: (NSString *) _value;
- (NSString *) uid;

- (void) setSummary: (NSString *) _value;
- (NSString *) summary;

- (void) setLocation: (NSString *) _value;
- (NSString *) location;

- (void) setComment: (NSString *) _value;
- (NSString *) comment;

- (void) setAccessClass:(NSString *) _value;
- (NSString *) accessClass;
- (iCalAccessClass) symbolicAccessClass;
- (BOOL) isPublic;

- (void) setPriority: (NSString *) _value;
- (NSString *) priority;

- (void) setCategories: (NSArray *) _value;
- (NSArray *) categories;

- (void) setUserComment: (NSString *) _userComment;
- (NSString *) userComment;

- (void) setTimeStampAsDate: (NSCalendarDate *)_date;
- (NSCalendarDate *) timeStampAsDate;

- (void) setStartDate: (NSCalendarDate *) newStartDate;
- (NSCalendarDate *) startDate;
- (BOOL) hasStartDate;

- (void) setRecurrenceId: (NSCalendarDate *) newRecId;
- (NSCalendarDate *) recurrenceId;

- (void) setLastModified: (NSCalendarDate *) _value;
- (NSCalendarDate *) lastModified;

- (void) setCreated: (NSCalendarDate *) _value;
- (NSCalendarDate *) created;

- (void) setSequence: (NSNumber *) _value; /* this is an int */
- (NSNumber *) sequence;
- (void) increaseSequence;

/* url can either be set as NSString or NSURL */ 
- (void) setAttach: (NSArray *) _value;
- (NSArray *) attach;
- (void) setUrl: (id) _value;
- (NSURL *) url;
  
- (void) setOrganizer: (iCalPerson *) _organizer;
- (iCalPerson *) organizer;
- (BOOL)isOrganizer:(id)_email;

- (void) setStatus: (NSString *) _value;
- (NSString *) status;

- (void) addToAttendees: (iCalPerson *) _person;
- (NSArray *) attendees;
- (void) setAttendees: (NSArray *) attendees;
- (BOOL) isAttendee: (id) _email;

- (void) removeFromAttendees: (iCalPerson *) oldAttendee;
- (void) removeAllAttendees;

/* categorize attendees into participants and non-participants */
- (NSArray *) participants;
- (NSArray *) nonParticipants;
- (BOOL) isParticipant: (id) _email;
- (iCalPerson *) findAttendeeWithEmail: (id) email;

- (void) removeAllAlarms;
- (void) addToAlarms: (id) _alarm;
- (NSArray *) alarms;
- (BOOL) hasAlarms;

/* comparisons */
- (NSComparisonResult) compare: (iCalEntityObject *) otherObject;

@end

#endif /* __NGCards_iCalEntityObject_H__ */
