# API

### Framework Bridge (Client-side)

#### Framework.GetPlayerData()

Returns player data object.

```lua
local playerData = Framework.GetPlayerData()
-- Returns: table
```

#### Framework.IsPlayerLoaded()

Check if player is loaded and ready.

```lua
local isLoaded = Framework.IsPlayerLoaded()
-- Returns: boolean
```

#### Framework.GetPlayerJob()

Get player's current job.

```lua
local job = Framework.GetPlayerJob()
-- Returns: table
```

#### Framework.ShowNotification(message, type, duration)

Show notification to player.

```lua
Framework.ShowNotification("Hello World!", "success", 5000)
-- message: string - notification text
-- type: string - "success", "error", "info", "warn" (optional, default: "info")
-- duration: number - duration in ms (optional, default: 3500)
```

### Framework Bridge (Server-side)

#### Framework.GetPlayer(source)

Get player object by source.

```lua
local player = Framework.GetPlayer(source)
-- source: number - player source
-- Returns: table with player data or nil
```

#### Framework.GetPlayerIdentifier(source)

Get player's unique identifier.

```lua
local identifier = Framework.GetPlayerIdentifier(source)
-- source: number - player source  
-- Returns: string - citizenid/identifier or nil
```

#### Framework.GetPlayerJob(source)

Get player's job.

```lua
local job = Framework.GetPlayerJob(source)
-- source: number - player source
-- Returns: table or nil
```

#### Framework.AddMoney(source, amount, moneyType)

Add money to player.

```lua
local success = Framework.AddMoney(source, 500, 'cash')
-- source: number - player source
-- amount: number - amount to add
-- moneyType: string - "cash", "bank", etc. (optional, default: "cash")
-- Returns: boolean - success
```

#### Framework.RemoveMoney(source, amount, moneyType)

Remove money from player.

```lua
local success = Framework.RemoveMoney(source, 100, 'cash')
-- source: number - player source
-- amount: number - amount to remove
-- moneyType: string - "cash", "bank", etc. (optional, default: "cash")
-- Returns: boolean - success (false if not enough money)
```

#### Framework.RegisterUseableItem(itemName, callback)

Register an item as useable.

```lua
Framework.RegisterUseableItem('sandwich', function(source, item)
    print("Player", source, "used", item.name)
end)
-- itemName: string - item name
-- callback: function - function to call when item is used
```

#### Framework.ShowNotification(source, message, type, duration)

Show notification to specific player.

```lua
Framework.ShowNotification(source, "Hello!", "success", 5000)
-- source: number - player source
-- message: string - notification text
-- type: string - notification type (optional)
-- duration: number - duration in ms (optional)
```

### Inventory System (Client-side)

#### Inventory.CloseInventory()

Close player's inventory.

```lua
Inventory.CloseInventory()
```

### Inventory System (Server-side)

#### Inventory.AddItem(source, item, amount, slot, info)

Add item to player's inventory.

```lua
local success = Inventory.AddItem(source, 'water', 5, nil, {quality = 100})
-- source: number - player source
-- item: string - item name
-- amount: number - quantity (optional, default: 1)
-- slot: number - specific slot (optional)
-- info: table - item metadata (optional)
-- Returns: boolean - success
```

#### Inventory.RemoveItem(source, item, amount, slot)

Remove item from player's inventory.

```lua
local success = Inventory.RemoveItem(source, 'water', 2)
-- source: number - player source
-- item: string - item name
-- amount: number - quantity (optional, default: 1)
-- slot: number - specific slot (optional)
-- Returns: boolean - success
```

#### Inventory.GetItem(source, item)

Get item data from player's inventory.

```lua
local itemData = Inventory.GetItem(source, 'water')
-- source: number - player source
-- item: string - item name
-- Returns: table with item data or nil
```

#### Inventory.HasItem(source, item, amount)

Check if player has item.

```lua
local hasItem = Inventory.HasItem(source, 'water', 3)
-- source: number - player source
-- item: string - item name
-- amount: number - required quantity (optional, default: 1)
-- Returns: boolean
```

#### Inventory.GetItemCount(source, item)

Get item count in player's inventory.

```lua
local count = Inventory.GetItemCount(source, 'water')
-- source: number - player source
-- item: string - item name
-- Returns: number - item count
```

### Functions (Client-side)

#### API.SetEntityLookAtEntity(entity, target)

Make entity look at another entity.

```lua
API.SetEntityLookAtEntity(PlayerPedId(), targetPed)
-- entity: number - entity to rotate
-- target: number - entity to look at
```

#### API.ShowHelpNotify(text)

Show help notification.

```lua
API.ShowHelpNotify("Press ~INPUT_PICKUP~ to interact")
-- text: string - help text to display
```

#### API.CreateBoxZone(data)

Create target box zone.

```lua
local zoneId = API.CreateBoxZone({
    name = "shop_zone",
    coords = vector3(0, 0, 0),
    length = 2.0,
    width = 2.0,
    heading = 0.0,
    minZ = -1.0,
    maxZ = 1.0,
    options = {
        {
            icon = "fas fa-shopping-cart",
            label = "Open Shop",
            action = function() print("Shop opened!") end
        }
    },
    distance = 2.0
})
-- Returns: string - zone ID
```

#### API.AddTargetEntity(entity, data)

Add target to entity.

```lua
API.AddTargetEntity(ped, {
    options = {
        {
            icon = "fas fa-user",
            label = "Talk to NPC",
            action = function() print("Talking...") end
        }    
    },
    distance = 2.0
})
-- entity: number - entity handle
-- data: table - target options
```

#### API.RemoveZone(id)

Remove target zone.

```lua
API.RemoveZone(zoneId)
-- id: string - zone ID to remove
```

### Utility Functions

#### Utils.Debug(message, level)

Print debug message (if Config.Debug = true).

```lua
Utils.Debug("Something happened", "info")
-- message: string - debug message
-- level: string - "info", "error", "warn", "success" (optional, default: "info")
```

#### Utils.IsResourceRunning(resourceName)

Check if resource is running.

```lua
local isRunning = Utils.IsResourceRunning('qb-core')
-- resourceName: string - resource name
-- Returns: boolean
```

#### Utils.Round(num, decimals)

Round number to specified decimals.

```lua
local rounded = Utils.Round(3.14159, 2) -- 3.14
-- num: number - number to round
-- decimals: number - decimal places (optional, default: 0)
-- Returns: number
```

#### \_L(...)

Translation function.

```lua
local text = _L("Hello %s", playerName)
-- Supports string formatting and concatenation
-- Returns: string
```

### Event System

#### Ready Events

```lua
-- Client
RegisterNetEvent('ic_lib:client:ready', function(frameworkName)
    print("Framework ready:", frameworkName)
end)

-- Server
RegisterNetEvent('ic_lib:server:ready', function(frameworkName)
    print("Framework ready:", frameworkName)
end)

-- Inventory ready
RegisterNetEvent('ic_lib:inventory:client:ready', function(inventoryName)
    print("Inventory ready:", inventoryName)
end)

RegisterNetEvent('ic_lib:inventory:server:ready', function(inventoryName)
    print("Inventory ready:", inventoryName)
end)

-- Target ready (client only)
RegisterNetEvent('ic_lib:target:client:ready', function(targetName)
    print("Target ready:", targetName)
end)
```

#### Player Events

```lua
-- Player loaded/unloaded
RegisterNetEvent('ic_lib:client:playerLoaded', function()
    print("Player loaded")
end)

RegisterNetEvent('ic_lib:server:playerLoaded', function(source, playerData)
    print("Player", source, "loaded")
end)

RegisterNetEvent('ic_lib:client:playerUnloaded', function()
    print("Player unloaded")
end)

RegisterNetEvent('ic_lib:server:playerUnloaded', function(source)
    print("Player", source, "unloaded")
end)

-- Job updates
RegisterNetEvent('ic_lib:client:jobUpdated', function(job)
    print("Job updated:", job.name)
end)

RegisterNetEvent('ic_lib:server:jobUpdated', function(source, job)
    print("Player", source, "job updated:", job.name)
end)

-- Money changes (QB-Core only)
RegisterNetEvent('ic_lib:client:moneyChanged', function(moneyType, amount, operation)
    print("Money changed:", moneyType, amount, operation)
end)

RegisterNetEvent('ic_lib:server:moneyChanged', function(source, moneyType, amount, operation)
    print("Player", source, "money changed:", moneyType, amount, operation)
end)
```

### Global Variables

```lua
Framework  -- Framework bridge object
Inventory  -- Inventory bridge object  
Target     -- Target system name ("qb-target", "ox_target", "standalone", etc.)
API        -- API functions object
Utils      -- Utility functions object
```
