package com.alterdekim.hearthhack.component.processor.client.request.generic;

import com.alterdekim.Protocol;
import com.alterdekim.hearthhack.component.TcpConnection;
import com.alterdekim.hearthhack.util.BattleNetPacket;

import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification;
import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.NOT_SO_MASSIVE_LOGIN;

public class NotSoMassiveLoginReply extends GenericParser {

    @Override
    public void parseGenericRequest(int token, TcpConnection conn) throws Exception {
        Protocol.NotSoMassiveLoginReply reply = Protocol.NotSoMassiveLoginReply.newBuilder()
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("launch"))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("naxx_1")
                        .setStart(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("naxx_2")
                        .setStart(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("naxx_3")
                        .setStart(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("naxx_4")
                        .setStart(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("naxx_5")
                        .setStart(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("gvg_promote")
                        .setStart(1)
                        .setEnd(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("gvg_begin")
                        .setStart(1)
                        .setEnd(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("gvg_arena")
                        .setStart(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("brm_1")
                        .setStart(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("brm_2")
                        .setStart(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("brm_3")
                        .setStart(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("brm_4")
                        .setStart(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("brm_5")
                        .setStart(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("brm_pre_sale")
                        .setStart(1)
                        .setEnd(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("brm_normal_sale")
                        .setStart(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("tgt_pre_sale")
                        .setStart(1)
                        .setEnd(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("tgt_normal_sale")
                        .setStart(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("loe_1")
                        .setStart(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("loe_2")
                        .setStart(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("loe_3")
                        .setStart(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("loe_4")
                        .setStart(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("feast_of_winter_veil")
                        .setStart(1)
                        .setEnd(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("set_rotation_2016")
                        .setStart(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("og_pre_purchase")
                        .setStart(1)
                        .setEnd(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("og_normal_sale")
                        .setStart(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("apple_charity_promo_2016")
                        .setStart(1)
                        .setEnd(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("naxx_gvg_real_money_sale")
                        .setStart(1)
                        .setEnd(0))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("set_rotation_2016_freepacks")
                        .setStart(0)
                        .setEnd(5059030))
                .addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
                        .setEvent("set_rotation_2016_questline")
                        .setStart(0)
                        .setEnd(5059028))
                .setTavernBrawls(Protocol.TavernBrawlInfo.newBuilder()
                        .setNextStartSecondsFromNow(124398L))
                .build();

        Protocol.Notification n = generateNotification(300, reply.toByteString(), reply.getSerializedSize());

        Protocol.Header header = Protocol.Header.newBuilder()
                .setServiceId(4)
                .setMethodId(1)
                .setToken(conn.nextToken())
                .setObjectId(0)
                .setSize(n.getSerializedSize())
                .setStatus(0)
                .build();

        conn.send(new BattleNetPacket(header, n.toByteArray()));
    }

    @Override
    public int getId() {
        return NOT_SO_MASSIVE_LOGIN.getValue();
    }
}
