package org.example.ycs.responder;

import lombok.SneakyThrows;
import lombok.extern.log4j.Log4j2;
import org.apache.tomcat.util.buf.HexUtils;
import org.example.ycs.MessageResponder;
import org.example.ycs.ResponderRegistry;
import org.jpos.iso.ISOException;
import org.jpos.iso.ISOMsg;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.Optional;

@Component
@Log4j2
public class SaleResponder extends BaseAuthResponder implements MessageResponder {
    @Autowired
    ResponderRegistry responderRegistry;

    @PostConstruct
    public void setup() {
        responderRegistry.register(this);
    }


    @SneakyThrows
    @Override
    public boolean isMatched(ISOMsg req) {
        if ("0200".equals(req.getMTI())) {
            return true;
        }
        return false;
    }

    @Override
    public ISOMsg respond(ISOMsg request) {
        ISOMsg response = baseResponse(request);
        boolean isEven = Optional.ofNullable(request.getString(11)).map(Integer::valueOf).map(x -> ((x % 2) == 0)).orElse(false);
        if (request.getString(22).substring(0,2).equals("05")) {
            if (request.getString(4).equals("000000003600")) {
                response.set(55, HexUtils.fromHexString("910AB784EBA89E8893EF303072379F180400000000860E04DA9F5809038EC6C9D49AE29E83860E04DA9F5809026F9170BFBA502A88860E04DA9F580904BEED12195E57EE7E"));
            } else {
                response.set(55, HexUtils.fromHexString("8A023030"));
            }
        }
        if (request.getString(4).equals("000000000124")) {
            // Simulate Timeout for 20 seconds if amount is 123
            response.set(39, "92");
            response.set(55, HexUtils.fromHexString("910A6EC3298EE96CBE843932"));
        } else if (isEven && request.getString(4).equals("000000000065")) {
            // Simulate Timeout for 20 seconds if amount is 123
            response.set(39, "65");
            //response.set(55, HexUtils.fromHexString("910A6EC3298EE96CBE843932"));
            response.unset(55);
        } else if (request.getString(4).equals("000000000061")) {
            // Simulate Timeout for 20 seconds if amount is 123
            response.set(39, "61");
        } else if (request.getString(4).equals("000000025000")) {
            // Simulate Timeout for 20 seconds if amount is 123
            response.set(39, "10");
            response.set(4, "000000000367");
        } else {
            response.set(39, "00");
            response.set (38, "123456");
        }
        return response;
    }
}
