package emu.grasscutter.server.packet.send;

import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.game.avatar.Avatar;
import emu.grasscutter.net.proto.AvatarSatiationDataNotifyOuterClass.AvatarSatiationDataNotify;
import emu.grasscutter.net.proto.AvatarSatiationDataOuterClass.AvatarSatiationData;

public class PacketAvatarSatiationDataNotify extends BasePacket {

	public PacketAvatarSatiationDataNotify(Avatar avatar, float finishTime, long penaltyTime) {
		super(PacketOpcodes.AvatarSatiationDataNotify);

		AvatarSatiationData.Builder avatarSatiation = AvatarSatiationData.newBuilder()
				.setAvatarGuid(avatar.getGuid())
				.setFinishTime(finishTime);

		// Penalty for overeating
		if (penaltyTime > 0) {
			avatarSatiation.setPenaltyFinishTime(penaltyTime);
		}

		avatarSatiation.build();

		AvatarSatiationDataNotify notify = AvatarSatiationDataNotify.newBuilder()
				.addSatiationDataList(0, avatarSatiation)
				.build();

		this.setData(notify);
	}

	public PacketAvatarSatiationDataNotify(float time, Avatar avatar) {
		super(PacketOpcodes.AvatarSatiationDataNotify);

		var avatarSatiation = AvatarSatiationData.newBuilder()
				.setAvatarGuid(avatar.getGuid())
				.setFinishTime(time + (avatar.getSatiation() / 30f))
				// Penalty time always ends before finish time
				.setPenaltyFinishTime(time + (avatar.getSatiationPenalty() / 100f))
				.build();

		AvatarSatiationDataNotify notify = AvatarSatiationDataNotify.newBuilder()
				.addSatiationDataList(0, avatarSatiation)
				.build();

		this.setData(notify);
	}
}
