#
# $Id: mailbox.icn,v 1.3 2006-07-10 13:43:32 rparlett Exp $
#

package mail

import util

#
# This class represents an internet Address, which
# may be parsed in accordance with RFC822.
#
class Mailbox : Address : Error(local_part, domain, phrase, route)
   method get_local_part() 
      return local_part
   end

   method set_local_part(x)
      local_part := x
   end

   method get_domain()
      return domain
   end
   
   method set_domain(x)
      domain := x
   end

   method get_phrase() 
      return phrase
   end

   method set_phrase(x)
      phrase := x
   end

   method get_route() 
      return route
   end

   method set_route(x)
      route := x
   end

   method to_rfc822()
      local res, addr

      addr := local_part || "@" || domain

      if *(phrase | route) > 0 then {
         if *phrase > 0 then
            res := phrase || " <"
         else
            res := "<"
         if *route > 0 then {
            every res ||:= "@" || !route
            res ||:= ": "
         }
         return res || addr || ">"
      } else
         return addr
   end

   method to_string()
      return to_rfc822()
   end

   method parse(s)
      local p
      p := mail::RFC822Parser()
      return p.parse_mailbox(s, self) | error(p)
   end   

   method generate_mailboxes()
      return self
   end

   initially(a[])
      if *a = 1 then
         parse(a[1]) | fail
      else if *a >= 2 then {
         local_part := a[1]
         domain := a[2]
         phrase := a[3] | ""
         route := a[4] | []
      }
end

procedure mailbox_list_to_string(l)
   local s, e
   s := ""
   every e := !l do {
      if *s > 0 then
         s ||:= ","
      s ||:= e.to_rfc822()
   }
   return s
end
