package com.jscape.inet.sftp.protocol.v4.marshaling;

import com.jscape.inet.sftp.protocol.marshaling.MessageCodec;
import com.jscape.inet.sftp.protocol.v4.messages.*;

/**
 * @author Alex Usun
 */
public class Messages4 {

    public static final SshFxpExtendedCodec.Entry[] EXTENDED_ENTRIES = {
            new SshFxpExtendedCodec.Entry("check-file-name", new SshFxpExtendedCheckFileNameCodec(), SshFxpExtendedCheckFileName.class),
            new SshFxpExtendedCodec.Entry("text-seek", new SshFxpExtendedTextSeekCodec(), SshFxpExtendedTextSeek.class),
    };

    public static final SshFxpExtendedReplyCodec.Entry[] EXTENDED_REPLY_ENTRIES = {
            new SshFxpExtendedReplyCodec.Entry(new SshFxpExtendedReplyCheckFileNameCodec(), SshFxpExtendedReplyCheckFileName.class),
    };

    public static final MessageCodec.Entry[] ENTRIES = {
            new MessageCodec.Entry(1, new SshFxpInitCodec(), SshFxpInit.class),
            new MessageCodec.Entry(2, new SshFxpVersionCodec(), SshFxpVersion.class),
            new MessageCodec.Entry(3, new SshFxpOpenCodec(), SshFxpOpen.class),
            new MessageCodec.Entry(4, new SshFxpCloseCodec(), SshFxpClose.class),
            new MessageCodec.Entry(5, new SshFxpReadCodec(), SshFxpRead.class),
            new MessageCodec.Entry(6, new SshFxpWriteCodec(), SshFxpWrite.class),
            new MessageCodec.Entry(7, new SshFxpLstatCodec(), SshFxpLstat.class),
            new MessageCodec.Entry(8, new SshFxpFstatCodec(), SshFxpFstat.class),
            new MessageCodec.Entry(9, new SshFxpSetStatCodec(), SshFxpSetStat.class),
            new MessageCodec.Entry(10, new SshFxpFsetStatCodec(), SshFxpFsetStat.class),
            new MessageCodec.Entry(11, new SshFxpOpendirCodec(), SshFxpOpendir.class),
            new MessageCodec.Entry(12, new SshFxpReaddirCodec(), SshFxpReaddir.class),
            new MessageCodec.Entry(13, new SshFxpRemoveCodec(), SshFxpRemove.class),
            new MessageCodec.Entry(14, new SshFxpMkdirCodec(), SshFxpMkdir.class),
            new MessageCodec.Entry(15, new SshFxpRmdirCodec(), SshFxpRmdir.class),
            new MessageCodec.Entry(16, new SshFxpRealPathCodec(), SshFxpRealPath.class),
            new MessageCodec.Entry(17, new SshFxpStatCodec(), SshFxpStat.class),
            new MessageCodec.Entry(18, new SshFxpRenameCodec(), SshFxpRename.class),
            new MessageCodec.Entry(19, new SshFxpReadLinkCodec(), SshFxpReadLink.class),
            new MessageCodec.Entry(20, new SshFxpSymLinkCodec(), SshFxpSymLink.class),
            new MessageCodec.Entry(101, new SshFxpStatusCodec(), SshFxpStatus.class),
            new MessageCodec.Entry(102, new SshFxpHandleCodec(), SshFxpHandle.class),
            new MessageCodec.Entry(103, new SshFxpDataCodec(), SshFxpData.class),
            new MessageCodec.Entry(104, new SshFxpNameCodec(), SshFxpName.class),
            new MessageCodec.Entry(105, new SshFxpAttrsCodec(), SshFxpAttrs.class),
            new MessageCodec.Entry(200, new SshFxpExtendedCodec(EXTENDED_ENTRIES), SshFxpExtendedCheckFileName.class, SshFxpExtendedTextSeek.class),
            new MessageCodec.Entry(201, new SshFxpExtendedReplyCodec(EXTENDED_REPLY_ENTRIES), SshFxpExtendedReplyCheckFileName.class),
    };

    public static MessageCodec init(MessageCodec codec) {
        return codec.set(ENTRIES);
    }

    public static SshFxpExtendedReplyCodec init(SshFxpExtendedReplyCodec codec) {
        return codec.set(EXTENDED_REPLY_ENTRIES);
    }

    private Messages4() {
        // empty
    }
}
