pub mod lobby;
pub mod room;

use libpso::character::character::Inventory;
use libpso::packet::ship::{PlayerHeader, PlayerInfo};
use libpso::utf8_to_utf16_array;
use crate::common::leveltable::CharacterLevelTable;
use crate::ship::character::CharacterBytesBuilder;
use crate::ship::ship::ClientState;
use crate::ship::location::AreaClient;

pub fn player_header(tag: u32, client: &ClientState, area_client: &AreaClient) -> PlayerHeader {
    PlayerHeader {
        tag: tag,
        guildcard: client.user.id.0,
        _unknown1: [0; 5],
        client_id: area_client.local_client.id() as u32,
        name: libpso::utf8_to_utf16_array!(client.character.name, 16),
        _unknown2: 2,
    }
}

pub fn player_info(tag: u32, client: &ClientState, area_client: &AreaClient, level_table: &CharacterLevelTable) -> PlayerInfo {
    let (level, stats) = level_table.get_stats_from_exp(client.character.char_class, client.character.exp);
    let character = CharacterBytesBuilder::new()
        .character(&client.character)
        .stats(&stats)
        .level(level - 1)
        .build();
    PlayerInfo {
        header: player_header(tag, client, area_client),
        inventory: Inventory {
            item_count: client.inventory.count() as u8,
            hp_mats_used: 0, // TODO: materials
            tp_mats_used: 0, // TODO: materials
            language: 0, // TODO: account language
            items: client.inventory.as_client_inventory_items(),
        },
        character: character,
    }
}