package ld5_1;

import jade.core.Agent;
import jade.core.behaviours.SimpleBehaviour;
import jade.lang.acl.MessageTemplate;
import jade.lang.acl.ACLMessage;

public class Custom extends Agent {
    private void print(String data, String elgesenosId) {
        if (elgesenosId != null) {
            System.out.println("A[" + getLocalName() + " | " + elgesenosId + "] " + data);
        } else {
            System.out.println("A[" + getLocalName() + "] " + data);
        }
    }

    @Override
    public void setup() {
        addBehaviour(new PirmaElgsena());
        addBehaviour(new AntraElgsena());
    }

    private class PirmaElgsena extends SimpleBehaviour {

        @Override
        public void action() {
            // MessageTemplate pattern = MessageTemplate.and(MessageTemplate.MatchPerformative(ACLMessage.INFORM), MessageTemplate.MatchContent(MSG_QUEUE_CLASS))
            MessageTemplate pattern = MessageTemplate.MatchPerformative(ACLMessage.INFORM);
            ACLMessage msg = myAgent.receive(pattern);
            
            if (msg == null) {
                block();
                return;
            }

            String content = msg.getContent();
            if (content.startsWith("IN")) {
                print("Pirmas gavo:" + content.substring(0, 2), "Pirma");
                try {
                    Thread.sleep(10 * 1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                print(content, "Pirma");

                if (content.equals("Stop")) {
                    doDelete();
                    return;
                }

            } else {
                myAgent.putBack(msg);
                block();
            }
        }

        @Override
        public boolean done() {
            return false;
        }
    }

    private class AntraElgsena extends SimpleBehaviour {
        @Override
        public void action() {
            // MessageTemplate pattern = MessageTemplate.and(MessageTemplate.MatchPerformative(ACLMessage.INFORM), MessageTemplate.MatchContent(MSG_QUEUE_CLASS))
            MessageTemplate pattern = MessageTemplate.not(MessageTemplate.MatchPerformative(ACLMessage.INFORM));
            ACLMessage msg = myAgent.receive(pattern);
            
            if (msg == null) {
                block();
                return;
            }

            String content = msg.getContent();
            print("Antras gavo:" + content, "Antras");

            if (content.equals("Stop")) {
                doDelete();
                return;
            }
        }

        @Override
        public boolean done() {
            return false;
        }
    }

    @Override
    public void takeDown() {
        print("i died", null);
    }
}
