package com.csc.library.websocket;

import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.HashSet;
import java.util.Set;

import javax.websocket.CloseReason;
import javax.websocket.EndpointConfig;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;

import com.csc.library.controller.WebSocketCommandController;
import com.csc.library.factory.PackageDataFactory;
import com.csc.library.factory.PropertiesFactory;
import com.csc.library.properties.DeviceProperties;
import com.csc.library.properties.HandleMessageData;
import com.csc.library.properties.HandlePackage;

@ServerEndpoint(value = "/CSCWS")
public class WebSocketController {
	private ServerWebSocket serverSocket = null;
	private WebSocketCommandController commandControl = WebSocketCommandController.getInstance();
	private HandlePackage handle = new HandleMessageData();
	//private static final Set<Session> sessions = new HashSet<Session>();
	
	@OnOpen
	public void open(Session session, EndpointConfig conf ) throws IOException {
		serverSocket = ServerWebSocket.getInstance();
		DeviceProperties device = new DeviceProperties();
		device.setDeviceID("XXXXX");
		device.setPassWord("YYYY");
		device.setUserName("XYZ");
		if(serverSocket.registerSession(session, PropertiesFactory.getInstance().toJson(device))){
			//serverSocket.
		}
		//sessions.add(session);
	} 
	
	@OnClose
    public void close(Session session , CloseReason closeReason) {

	}
	
	@OnError
	public void onError(Throwable error) {
	}
	
	@OnMessage
	public void handleMessage(Session session , String message)  throws IOException{
		/*for(Session ses : sessions){
			ses.getBasicRemote().sendText(message);
		}*/
		System.out.println("========> OnMessage String : "+message);
		PackageDataFactory.getInstance().handlePackageData(serverSocket.getCscSession(session), handle , message);
		//commandControl.executeCommand(serverSocket.getCscSession(session), message);
	}
	
	@OnMessage
	public void handleMessage(Session session , ByteBuffer buffer)  throws IOException{
		/*for(Session ses : sessions){
			ses.getBasicRemote().sendText(message);
		}*/
		System.out.println("========> OnMessage ByteBuffer : "+buffer);
		//PackageDataFactory.getInstance().handlePackageData(serverSocket.getCscSession(session), handle , message);
		//commandControl.executeCommand(serverSocket.getCscSession(session), message);
	}
}