#ifndef INTERACTABLE_H
#define INTERACTABLE_H

#include <types.h>
#include "Dialog.h"
#include "GameTypes.h"
#include "Inventory.h"
#include "Map.h"
#include "Player.h"

#define INTERACTABLE_DOOR_RED 1
#define INTERACTABLE_DOOR_GREEN 2
#define INTERACTABLE_DOOR_YELLOW 3
#define INTERACTABLE_SWITCH_OFF 4
#define INTERACTABLE_SWITCH_ON 5
#define INTERACTABLE_VALVE_OFF 6
#define INTERACTABLE_VALVE_ON 7
#define INTERACTABLE_PUMP_PART1_BROKEN 8
#define INTERACTABLE_PUMP_PART1_WORKING 9
#define INTERACTABLE_PUMP_PART2 10
#define INTERACTABLE_TANK_BROKEN 11
#define INTERACTABLE_TANK_FIXED 12
#define INTERACTABLE_OXYGEN_POINT 13
#define INTERACTABLE_SPIKE_RIGHT 14
#define INTERACTABLE_SPIKE_LEFT 15
#define INTERACTABLE_SPIKE_UP 16
#define INTERACTABLE_SPIKE_DOWN 17
#define INTERACTABLE_SPIKE_UP_LAND 18
#define INTERACTABLE_CRACKED_TILE_SAND 19
#define INTERACTABLE_CRACKED_TILE_STONE 20
#define INTERACTABLE_CRACKED_TILE_DIRT 21
#define INTERACTABLE_TELEPORTER_OFF 22
#define INTERACTABLE_TELEPORTER_ON 23
#define INTERACTABLE_CPC 24
#define INTERACTABLE_CPC_ACTIVATED 25
#define INTERACTABLE_ELECTRIC_DOOR_1 26
#define INTERACTABLE_ELECTRIC_DOOR_2 27
#define INTERACTABLE_PIPE_LOCATION 28
#define INTERACTABLE_PIPE_LOCATION_FILLED 29
#define INTERACTABLE_PLATFORM 30
#define INTERACTABLE_EXIT 31

// Tests if an interactable is ready for it to be used or activated.
u8 isInteractableReady(u8 interactable);

// Activates an interactable in a particular cell and room (generally where the player is).
u8 activateInteractable(u8 x, u8 y, u8 roomX, u8 roomY, u8 sourceInteractbleType);

// Activates a linked interactable from a specified source interactable position.
void activateLinkedInteractable(u8 sourceX, u8 sourceY);

#endif