/*
 */
package com.teltonikaServer.protocol;

import com.teltonikaServer.lib.Utils;
import com.teltonikaServer.network.TCPServer;
import com.teltonikaServer.persistence.Asset;
import java.util.logging.Level;

/**
 *
 * @author Americo
 */
public class Codec8Extended_AvlData {

    protected byte dm[];
    protected int dataLength;

    //AVL data
    protected long timestamp;
    private int priority;
    private GpsElementSection gpsElement;
    private IoElementsSection ioElement;
    private int offset;
    private long logId;

    public GpsElementSection getGpsElement() {
        return this.gpsElement;
    }

    public IoElementsSection getIoElement() {
        return this.ioElement;
    }

    public Codec8Extended_AvlData(byte dataMessage[]) {
        this.dm = dataMessage;
    }

    public Codec8Extended_AvlData(byte[] dataMessage, long logId) {
        this.logId = logId;
        this.dm = dataMessage;
    }

    public int parse(Asset asset) {

        int messageType = -1;
        try {

            this.gpsElement = new GpsElementSection();
            this.ioElement = new IoElementsSection();
            this.timestamp = Utils.getLongFromMessageArray(dm, 0, 8) / 1000;
            this.offset = 8;
            this.priority = (int) Utils.getLongFromMessageArray(dm, 8, 1);
            //System.out.println("Priority: " + this.priority);
            this.offset += 1;
            this.gpsElement.parse(Utils.getSubArray(dm, this.offset), this.timestamp);
            this.offset += 15;
            this.ioElement.parse(Utils.getSubArray(dm, this.offset));
            this.offset += this.ioElement.getOffset();
            messageType = ioElement.IO_id;
        }  catch (Exception exception) {
            exception.printStackTrace();
            TCPServer.serverLog.logEvent(Level.SEVERE, "Error de parsing Codec 8 extended. LogId: " + logId);
        }
        return messageType;
    }
    
    
    @Override
    public String toString() {
        String toString = "Data length: " + this.dataLength;
        toString += "Timestamp: " + this.timestamp;
        toString += "Priority: " + this.priority;
        toString += "AVL data:\n" + this.gpsElement.toString();
        return toString;
    }

    public int getOffset() {
        return this.offset;
    }

}
