package emu.grasscutter.server.packet.send;

import emu.grasscutter.Grasscutter;
import emu.grasscutter.game.entity.EntityVehicle;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.entity.GameEntity;

import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.VehicleInteractTypeOuterClass.VehicleInteractType;
import emu.grasscutter.net.proto.VehicleInteractRspOuterClass.VehicleInteractRsp;
import emu.grasscutter.net.proto.VehicleMemberOuterClass.VehicleMember;

public class PacketVehicleInteractRsp extends BasePacket {

	public PacketVehicleInteractRsp(Player player, int entityId, VehicleInteractType interactType) {
		super(PacketOpcodes.VehicleInteractRsp);
		VehicleInteractRsp.Builder proto = VehicleInteractRsp.newBuilder();

		GameEntity vehicle = player.getScene().getEntityById(entityId);

		if(vehicle instanceof EntityVehicle) {
			proto.setEntityId(vehicle.getId());

			VehicleMember vehicleMember = VehicleMember.newBuilder()
					.setUid(player.getUid())
					.setAvatarGuid(player.getTeamManager().getCurrentCharacterGuid())
					.build();

			proto.setInteractType(interactType);
			proto.setMember(vehicleMember);

			switch(interactType){
				case VEHICLE_INTERACT_IN -> {
					((EntityVehicle) vehicle).getVehicleMembers().add(vehicleMember);
				}
				case VEHICLE_INTERACT_OUT -> {
					((EntityVehicle) vehicle).getVehicleMembers().remove(vehicleMember);
				}
				default -> {}
			}
		}
		this.setData(proto.build());
	}

	public PacketVehicleInteractRsp(EntityVehicle vehicle, VehicleMember vehicleMember, VehicleInteractType interactType) {
		super(PacketOpcodes.VehicleInteractRsp);
		VehicleInteractRsp.Builder proto = VehicleInteractRsp.newBuilder();

		if(vehicle != null) {
			proto.setEntityId(vehicle.getId());
			proto.setInteractType(interactType);
			proto.setMember(vehicleMember);

			switch(interactType){
				case VEHICLE_INTERACT_IN -> {
					vehicle.getVehicleMembers().add(vehicleMember);
				}
				case VEHICLE_INTERACT_OUT -> {
					vehicle.getVehicleMembers().remove(vehicleMember);
				}
				default -> {}
			}
		}
		this.setData(proto.build());
	}
}
