const e=require("compact-encoding"),d=require("@holepunchto/hyperindex"),{GENERIC_EVENTS:n,DISPLAY_TYPES:o}=require("@holepunchto/keet-core-api"),c=0,t=[d.UINT,d.UINT],r=[d.BUFFER,d.UINT],i=e.fixed32,p=d.UINT,u={preencode(d,n){e.fixed32.preencode(d,n.key),e.uint.preencode(d,n.seq)},encode(d,n){e.fixed32.encode(d,n.key),e.uint.encode(d,n.seq)},decode:d=>({key:e.fixed32.decode(d),seq:e.uint.decode(d)})},s={preencode(d,n){e.uint.preencode(d,n[0]),e.uint.preencode(d,n[1])},encode(d,n){e.uint.encode(d,n[0]),e.uint.encode(d,n[1])},decode:d=>[e.uint.decode(d),e.uint.decode(d)]},l={TYPE:o.MENTION,preencode(e,d){i.preencode(e,d.memberId),I.preencode(e,d)},encode(e,d){i.encode(e,d.memberId),I.encode(e,d)},decode:e=>({memberId:i.decode(e),...I.decode(e)})},a={preencode(d,n){let o=0;n.title&&(o|=1),n.description&&(o|=2),n.file&&(o|=4),e.uint.preencode(d,o),e.string.preencode(d,n.url),n.title&&e.string.preencode(d,n.title),n.description&&e.string.preencode(d,n.description),n.file&&L.preencode(d,n.file)},encode(d,n){let o=0;n.title&&(o|=1),n.description&&(o|=2),n.file&&(o|=4),e.uint.encode(d,o),e.string.encode(d,n.url),n.title&&e.string.encode(d,n.title),n.description&&e.string.encode(d,n.description),n.file&&L.encode(d,n.file)},decode(d){const n=e.uint.decode(d);return{url:e.string.decode(d),title:1&n?e.string.decode(d):null,description:2&n?e.string.decode(d):null,file:4&n?L.decode(d):null}}},E={TYPE:o.HTTP_LINK,preencode(d,n){let o=0;n.preview&&(o|=1),e.uint.preencode(d,o),h.preencode(d,n),n.preview&&a.preencode(d,n.preview)},encode(d,n){let o=0;n.preview&&(o|=1),e.uint.encode(d,o),h.encode(d,n),n.preview&&a.encode(d,n.preview)},decode(d){const n=e.uint.decode(d);return{...h.decode(d),preview:1&n?a.decode(d):null}}},v={TYPE:o.PEAR_LINK,preencode(d,n){let o=0;n.preview&&(o|=1),e.uint.preencode(d,o),h.preencode(d,n),n.preview&&a.preencode(d,n.preview)},encode(d,n){let o=0;n.preview&&(o|=1),e.uint.encode(d,o),h.encode(d,n),n.preview&&a.encode(d,n.preview)},decode(d){const n=e.uint.decode(d);return{...h.decode(d),preview:1&n?a.decode(d):null}}},y={TYPE:o.CODE,preencode(e,d){I.preencode(e,d)},encode(e,d){I.encode(e,d)},decode:e=>I.decode(e)},T={TYPE:o.CODE_BLOCK,preencode(e,d){I.preencode(e,d)},encode(e,d){I.encode(e,d)},decode:e=>I.decode(e)},f={TYPE:o.BOLD,preencode(e,d){I.preencode(e,d)},encode(e,d){I.encode(e,d)},decode:e=>I.decode(e)},w={TYPE:o.ITALIC,preencode(e,d){I.preencode(e,d)},encode(e,d){I.encode(e,d)},decode:e=>I.decode(e)},g={TYPE:o.STRIKE_THROUGH,preencode(e,d){I.preencode(e,d)},encode(e,d){I.encode(e,d)},decode:e=>I.decode(e)},m={TYPE:o.EMOJI,preencode(e,d){h.preencode(e,d)},encode(e,d){h.encode(e,d)},decode:e=>h.decode(e)},h={preencode(d,n){e.string.preencode(d,n.content),I.preencode(d,n)},encode(d,n){e.string.encode(d,n.content),I.encode(d,n)},decode:d=>({content:e.string.decode(d),...I.decode(d)})},I={preencode(d,n){e.uint.preencode(d,n.start),e.uint.preencode(d,n.length)},encode(d,n){e.uint.encode(d,n.start),e.uint.encode(d,n.length)},decode:d=>({start:e.uint.decode(d),length:e.uint.decode(d)})};function P(e){switch(e){case l.TYPE:return l;case E.TYPE:return E;case v.TYPE:return v;case f.TYPE:return f;case w.TYPE:return w;case y.TYPE:return y;case T.TYPE:return T;case g.TYPE:return g;case m.TYPE:return m;default:return null}}const Y={preencode(d,n){const o=P(n.type);if(!o)throw new Error("Unsupported display type");e.uint.preencode(d,n.type),o.preencode(d,n.value)},encode(d,n){const o=P(n.type);if(!o)throw new Error("Unsupported display type");e.uint.encode(d,n.type),o.encode(d,n.value)},decode(d){const n=e.uint.decode(d),o=P(n);if(!o)throw new Error("Unsupported display type");return{type:n,value:o.decode(d)}}},R=e.array(Y),x={preencode(d,n){d.end++,e.string.preencode(d,n.text)},encode(d,n){const o=d.start++;e.string.encode(d,n.text);let c=0;n.edited&&(c|=1),d.buffer[o]=c},decode(d){const n=e.uint.decode(d);return{text:e.string.decode(d),edited:!!(1&n)}}},_={preencode(e,d){L.preencode(e,d)},encode(e,d){L.encode(e,d)},decode:e=>L.decode(e)};function N(d){switch(d){case n.MEMBER_JOINED:case n.CALL_STARTED:case n.ROOM_AVATAR_CHANGED:case n.INVITATION_CREATED:case n.MEMBER_LEFT:return M;case n.MEMBER_REMOVED:return k;case n.ROOM_TITLE_CHANGED:return O;default:return e.buffer}}const A={preencode(d,n){e.uint.preencode(d,n.type);const o=N(n.type);o.preencode&&o.preencode(d,n.value)},encode(d,n){e.uint.encode(d,n.type);const o=N(n.type);o.preencode&&o.encode(d,n.value)},decode(d){const n=e.uint.decode(d),o=N(n);return o.preencode?{type:n,value:o.decode(d)}:{type:n,value:null}}},M={},O={preencode(d,n){e.string.preencode(d,n.from),e.string.preencode(d,n.to)},encode(d,n){e.string.encode(d,n.from),e.string.encode(d,n.to)},decode:d=>({from:e.string.decode(d),to:e.string.decode(d)})},k={preencode(d,n){e.fixed32.preencode(d,n.memberKey)},encode(d,n){e.fixed32.encode(d,n.memberKey)},decode:d=>({memberKey:e.fixed32.decode(d)})},D={preencode(d,n){let o=0;n.deleted&&(o|=1),n.timestamp&&(o|=2),n.chat&&(o|=4),n.file&&(o|=8),n.display&&(o|=16),n.event&&(o|=32),n.parent&&(o|=64),n.replyTo&&(o|=128),e.uint.preencode(d,o),e.uint.preencode(d,n.clock),u.preencode(d,n.id),n.timestamp&&e.uint.preencode(d,n.timestamp),n.chat&&x.preencode(d,n.chat),n.file&&_.preencode(d,n.file),n.display&&R.preencode(d,n.display),n.event&&A.preencode(d,n.event),n.parent&&u.preencode(d,n.parent),n.replyTo&&u.preencode(d,n.replyTo)},encode(d,n){let o=0;n.deleted&&(o|=1),n.timestamp&&(o|=2),n.chat&&(o|=4),n.file&&(o|=8),n.display&&(o|=16),n.event&&(o|=32),n.parent&&(o|=64),n.replyTo&&(o|=128),e.uint.encode(d,o),e.uint.encode(d,n.clock),u.encode(d,n.id),n.timestamp&&e.uint.encode(d,n.timestamp),n.chat&&x.encode(d,n.chat),n.file&&_.encode(d,n.file),n.display&&R.encode(d,n.display),n.event&&A.encode(d,n.event),n.parent&&u.encode(d,n.parent),n.replyTo&&u.encode(d,n.replyTo)},decode(d){const n=e.uint.decode(d);return{clock:e.uint.decode(d),id:u.decode(d),deleted:!!(1&n),timestamp:2&n?e.uint.decode(d):null,chat:4&n?x.decode(d):null,file:8&n?_.decode(d):null,display:16&n?R.decode(d):null,event:32&n?A.decode(d):null,parent:64&n?u.decode(d):null,replyTo:128&n?u.decode(d):null}}},b={preencode(d,n){e.fixed32.preencode(d,n.key),e.string.preencode(d,n.path),e.uint.preencode(d,n.version)},encode(d,n){e.fixed32.encode(d,n.key),e.string.encode(d,n.path),e.uint.encode(d,n.version)},decode:d=>({key:e.fixed32.decode(d),path:e.string.decode(d),version:e.uint.decode(d)})},C={preencode(d,n){e.uint.preencode(d,n.width),e.uint.preencode(d,n.height)},encode(d,n){e.uint.encode(d,n.width),e.uint.encode(d,n.height)},decode:d=>({width:e.uint.decode(d),height:e.uint.decode(d)})},L={preencode(d,n){let o=0;n.type&&(o|=1),n.dimensions&&(o|=2),n.preview&&(o|=4),n.previewPointer&&(o|=8),e.uint.preencode(d,o),b.preencode(d,n),n.type&&e.string.preencode(d,n.type),n.dimensions&&C.preencode(d,n.dimensions),n.preview&&e.buffer.preencode(d,n.preview),n.previewPointer&&b.preencode(d,n.previewPointer)},encode(d,n){let o=0;n.type&&(o|=1),n.dimensions&&(o|=2),n.preview&&(o|=4),n.previewPointer&&(o|=8),e.uint.encode(d,o),b.encode(d,n),n.type&&e.string.encode(d,n.type),n.dimensions&&C.encode(d,n.dimensions),n.preview&&e.buffer.encode(d,n.preview),n.previewPointer&&b.encode(d,n.previewPointer)},decode(d){const n=e.uint.decode(d),{key:o,path:c,version:t}=b.decode(d);return{key:o,path:c,version:t,type:1&n?e.string.decode(d):null,dimensions:2&n?C.decode(d):null,preview:4&n?e.buffer.decode(d):null,previewPointer:8&n?b.decode(d):null}}};module.exports={PRIMARY_THREAD_ID:0,IndexEventId:t,IndexMessageId:r,ClockIndexEncoding:p,MessageId:u,EventIdValueEncoding:s,GenericEvent:A,DisplayEvent:R,ChatEvent:x,EventRecord:D,FileRecord:L};