/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mobirent.abstracttags;

import com.mobirent.gui.Midlet;
import com.mobirent.gui.ExceptionHandler;
import com.mobirent.gui.XmlString2Data;
import com.mobirent.messageprocessor.MessageToObject;
import com.mobirent.messageprocessor.XmlMessage;
import gr.bluevibe.fire.components.Row;
import gr.bluevibe.fire.displayables.FireScreen;
import gr.bluevibe.fire.util.FireIO;
import java.util.Vector;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Font;

/**
 *
 * @author Budai Attila
 */
public abstract class Epitomize implements gr.bluevibe.fire.util.CommandListener {

    public static boolean harmas = true;
    public static boolean done = false;
    public static int waitValue = 20000;
    public static boolean isDone = true;
    public static boolean logoljunk = false;
    private static String ret = "";
    public static String userName = "";
    public static String passwd = "";
    public static String URL = "";
    public static String phoneId = "";
    public static String sessionId = ""; 
    public static String OId = "";
    public static String default_url = "";
    public static String url = "http://localhost/Pea/peaserv.php";
    public static String orderID = "";
    public static String oid = "";
    /**
     * A mobil alapvető gombjai.
     */
    public Command choose1, choose2, choose3;
    /**
     * Az egyetlen screen, amin a panelek folyamatosan megjelennek és váltakoznak.
     */
    public static FireScreen screen;
    /**
     * Maga az egyetlen MIDlet, ami fut.
     * (a kilépés végett kell)
     */
    public static Midlet myMidlet;

    /**
     * Midlet lekérdezése.
     * @return Midlet.
     */
    public static Midlet getMyMidlet() {
        return myMidlet;
    }

    /**
     * Midlet beállítása.
     * @param myMidlet A MIDlet.
     */
    public static void setMyMidlet(Midlet myMidlet) {
        Epitomize.myMidlet = myMidlet;
    }

    /**
     * Képernyő beállítása.
     * @param screen1 Egy adott Screen beállítása.
     */
    public static void setScreen(FireScreen screen1) {
        screen = screen1;
    }

    /**
     * Az éppen futó Screen lekérdezése.
     * @return Screen.
     */
    public static FireScreen getScreen() {
        return screen;
    }

    /**
     * Egy Row típusú objektumot ad vissza.
     * @param text a row neve.
     * @param color a row színe.
     * @return
     */
    public Row createRow(String text, int style) {
        Row row = new Row();

        row.setFilled(new Integer(FireScreen.defaultFilledRowColor));
        row.setBorder(true);
        row.setText(text);
        row.setFont(Font.getFont(Font.FACE_MONOSPACE, style, Font.SIZE_MEDIUM));
        row.setAlignment(FireScreen.CENTRE);

        return row;
    }

    /**
     * Egy gombot ad vissza, amivel az adott panelen navigálhatunk.
     * @param label a gomb neve.
     * @param hova a gomb elhelyezésérőn információ.
     * @return valaszt1.
     */
    public Row getChoose1(String label, int where) {
        choose1 = new Command("", Command.OK, 0);
        Row button = new Row(label);
        button.setAlignment(where);
        button.addCommand(choose1);
        button.setCommandListener(this);
        return button;
    }

    /**
     * Egy gombot ad vissza, amivel az adott panelen navigálhatunk.
     * @param label a gomb neve.
     * @param hova a gomb elhelyezésérőn információ.
     * @return valaszt2.
     */
    public Row getChoose2(String label, int where) {

        choose2 = new Command("", Command.OK, 0);
        Row button = new Row(label);
        button.setAlignment(where);
        button.addCommand(choose2);
        button.setCommandListener(this);
        return button;
    }

    /**
     * Egy gombot ad vissza, amivel az adott panelen navigálhatunk.
     * @param label a gomb neve.
     * @param hova a gomb elhelyezésérőn információ.
     * @return valaszt3.
     */
    public Row getChoose3(String label, int where) {
        choose3 = new Command("", Command.OK, 0);
        Row button = new Row(label);
        button.setAlignment(where);
        button.addCommand(choose3);
        button.setCommandListener(this);
        return button;
    }

    /*RecordSotre Feldolgozások*/
    public static void recordStoreProcesser(byte[] data) { 
        try {
            if (data.length != 0) {
               
            }
        } catch (Exception e) {
           
            return;
        }
        ret = "";
        for (int i = 0; i < data.length; ++i) {
            ret = ret + (char) data[i];
        }
        
    }

    public static void getRecordStoreDatas() {
        
        if (ret.length() == 0) {
        
            return;
        }
        Vector db = new Vector();
        int index = 0;
        for (int i = 0; i < ret.length(); i++) {
            if (ret.charAt(i) == ' ') {
                db.addElement(ret.substring(index, i));
                index = i + 1;
            }
        }
        try {
            userName = (String) db.elementAt(0);
            passwd = (String) db.elementAt(1);
            URL = (String) db.elementAt(2);
            try {
                sessionId = (String) db.elementAt(3);
                orderID = (String) db.elementAt(4);
                OId = (String) db.elementAt(5);
            } catch (Exception e) {
            }
        } catch (Exception e) {
        }
        ret = "";
        db.removeAllElements();
    }

    public static byte[] recordStoreReader(String fileName) {
        try {
            return FireIO.read(fileName);
        } catch (Exception ex) {
            ex.printStackTrace();
            return "".getBytes();
        }
    }

    public static void recordStoreWriter(String recName, String data) {
        try {
            FireIO.write(recName, data.getBytes());
            recordStoreProcesser(recordStoreReader("Adatok"));
            getRecordStoreDatas();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    /**
     * Szálakhoz kell, amint letelt az x másodperc, akkor meghívjuk ezt a kis metódust.
     * Amely akkor fut le, ha addig még nem jött létre a kapcsolat.
     * Tehát ha még a szál aktív : isDone == true, akkor a done-t átállítjuk igaz-ra
     * ami annyit tesz,h. igen: idötúllépés van.
     * 
     *
     *
     * */
    public static void setDone() {
    
        if (isDone) {
            done = true;
            isDone = false;
        }
        
    }

    /**
     * Szintén szálakhoz használjuk. Akkor hívjuk meg ezt a metódust, amint létrejött a kapcsolat a 
     * szerverrel. Ennek segítségével tudatjuk a másik szállal,h. sikeres volt, és nem lesz timeout! 
     * */
    public static void setIsDone() {
        isDone = false;
    }

    public static void setSessionId(String sessionId) {
        Epitomize.sessionId = sessionId;
    }

    public static String getSessionId() {
        return sessionId;
    }

    public static void setOId(String OId) {
        Epitomize.OId = OId;
    }

    public static String getOId() {
        return OId;
    }


    public static String sessionStartStr(String cName) {
        String msg = "<m>" +
                "<cname>" + cName + "</cname>" +
                "<schname>mobile</schname>" +
                "<create />" +
                "</m>";
        return msg;
    }

    public static void getDatas(String str) throws ExceptionHandler {
        if (str.equals("")) {
            throw new ExceptionHandler("1Hiba a hálózatban!");
        }
        try {
            XmlString2Data xmlStr2Data = new XmlString2Data(str);
            XmlMessage xmlMsg = new XmlMessage(xmlStr2Data.getXml());
            MessageToObject msg = new MessageToObject(xmlMsg);
            msg.generateObject("getDatas");
            
           // screen.getCurrentPanel().showAlert("Sikeres Bejelentkezés", null);
        } catch (ExceptionHandler ex) {
          //  screen.getCurrentPanel().showAlert(ex.getMessage(), null);
        }




    }

    public static String sessionNewInst(String cName) {
        String msg = "<m>" +
                "<sid>" + getSessionId() + "</sid>" +
                "<cname>" + cName + "</cname>" +
                "<create />" +
                "</m>";
        return msg;
    }

    public static String methodCall(String methodName, Vector paramsName, Vector paramsValue) {
        if (paramsName.size() != paramsValue.size()) {
            return null;
        }
        StringBuffer strBuff = new StringBuffer();
        for (int i = 0; i < paramsName.size(); i++) {
            if (paramsValue.elementAt(i) instanceof String) {
                strBuff.append("<" + (String) paramsName.elementAt(i) + ">" +
                        ((String) paramsValue.elementAt(i)) +
                        "</" + (String) paramsName.elementAt(i) + ">");
            } else {
                strBuff.append("<" + (String) paramsName.elementAt(i) + ">" +
                        ((DataClassable) paramsValue.elementAt(i)).reportIt() +
                        "</" + (String) paramsName.elementAt(i) + ">");
            }
        }
        String msg = "<m>" +
                "<sid>" + getSessionId() + "</sid>" +
                "<oid>" + getOId() + "</oid>" +
                "<" + methodName + ">" + strBuff.toString() + "</" + methodName + ">" +
                "</m>";
        return msg;
    }

    public static String methodCall(String methodName, String s) {

        String msg = "<m>" +
                "<sid>" + getSessionId() + "</sid>" +
                "<oid>" + getOId() + "</oid>" +
                "<" + methodName + ">" + s + "</" + methodName + ">" +
                "</m>";
        return msg;
    }

    public static String methodCall(String methodName) {
        String msg = "<m>" +
                "<sid>" + getSessionId() + "</sid>" +
                "<oid>" + getOId() + "</oid>" +
                "<" + methodName + ">" + "</" + methodName + ">" +
                "</m>";
        return msg;
    }

    public static String sessionStop() {
        String msg = "<m>" +
                " <sid>" + getSessionId() + "</sid>" +
                "<endsession />" +
                "</m>";
        return msg;
    }

    public static void threadWait() {
        new Thread(new Runnable() {

            public void run() {
                try {
                    System.out.println("wv: "+waitValue);
                    Thread.sleep(waitValue);
                    setDone();
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                }
            }
        }).start();
    }

    public static void putSessionId2RecordStore() {
        recordStoreWriter("Adatok", userName + " " + passwd + " " + URL + " " + sessionId + " " + orderID + " "+ OId + " ");
        recordStoreProcesser(recordStoreReader("Adatok"));
        getRecordStoreDatas();
    }

    public static void setOrderID(String orderID) {
        Epitomize.orderID = orderID;
    }

    public static String getOrderID() {
        return orderID;
    }

}
