using System;

namespace Server
{
    /// <summary>
    /// 我的游戏数据
    /// </summary>
    public interface IGameData
    {
        /// <summary>
        /// 获取座位id
        /// </summary>
        /// <param name="seat">-1表示随机获取一个id</param>
        /// <returns>-1表示未获取到玩家</returns>
        int GetSeatId(int seat);

        /// <summary>
        /// 获取玩家的字符串类型信息
        /// </summary>
        /// <param name="seat">玩家的座位</param>
        /// <param name="lx">0：玩家昵称,1:玩家注册地区</param>
        /// <returns></returns>
        string GetPlayerStr(int seat, int lx);

        /// <summary>
        /// 获取玩家的整形信息
        /// </summary>
        /// <param name="seat">玩家的座位</param>
        /// <param name="lx">lx 
        /// 0:获取玩家的台桌id,
        /// 1:玩家的座位,
        /// 2:玩家所在的城堡,
        /// 3:玩家的状态(0正常 1离开[需要代打] 2不在开战中),
        /// 4:玩家的金钱,
        /// 5:玩家的类型 0普通玩家 1鬼 -1无效id,
        /// 6:,
        /// 7:玩家的经验exp,
        /// 8:,
        /// 9:玩家的性别,
        /// 10:玩家的头像,
        /// 11:,
        /// 12:,
        /// 13:玩家的注册id,userid,
        /// 14:玩家的性格,
        /// 15:,
        /// 16:玩家所在的厅id,
        /// 17:是否是手机,
        /// 18:是否属于切屏状态,
        /// 19:是否处于托管挂机状态</param>
        /// <returns></returns>
        int GetPlayerInt(int seat, int lx);

        /// <summary>
        /// 获取桌子字符串信息
        /// </summary>
        /// <param name="lx">lx:
        /// 5:获取当前朋友房的规则字符串,</param>
        /// <returns></returns>
        string GetDeskStr(int lx);

        /// <summary>
        /// 获取台桌的整数信息
        /// </summary>
        /// <param name="lx">lx:
        /// 1:桌上当前人数 
        /// 4:当前桌子用的是第几个规则, 也就是厅的id 
        /// 5:桌子是否在开战中 
        /// 7:当前桌子是否是朋友房的桌子 
        /// 8:朋友房已完成局数 
        /// 9:当前正在进行的是第几局 从0开始 
        /// 10:是否是vip房间 
        /// 11:朋友房创建者的id 
        /// 12:朋友房要完成的局数 
        /// 13:座位数量 
        /// 14:朋友房创建的类型 0普通开 1代开房间 5竞技比赛创建房间
        /// </param>
        /// <returns></returns>
        int GetDeskInt(int lx);

        /// <summary>
        /// 获取厅的字符串信息
        /// </summary>
        /// <param name="lx"></param>
        /// <returns></returns>
        string GetTingStr(int lx);

        /// <summary>
        /// 获取厅信息
        /// </summary>
        /// <param name="lx">lx: 
        /// 0:预先创建的桌子数量, 
        /// 1:最小开战人数, 
        /// 2:最大开战人数, 
        /// 3:, 
        /// 4:获取厅的游戏币输赢值是对100取整的
        /// </param>
        /// <returns></returns>
        int GetTingInt(int lx);

        /// <summary>
        /// 获取房间字符串信息
        /// </summary>
        /// <param name="roomid">房间id</param>
        /// <param name="lx">lx</param>
        /// <returns></returns>
        string GetRoomStr(int roomid, int lx);

        /// <summary>
        /// 获取房间的整数型信息
        /// </summary>
        /// <param name="roomid">房间id</param>
        /// <param name="lx">0:房间赔率 2:房间模式 0普通模式 1百家乐模式 3:收税 4:经验加成</param>
        /// <returns></returns>
        int GetRoomInt(int roomid, int lx);

        /// <summary>
        /// 获取朋友房规则
        /// </summary>
        /// <returns></returns>
        string GetRoomGz();

        /// <summary>
        /// 设置玩家数据
        /// </summary>
        /// <param name="seat">玩家的内存id</param>
        /// <param name="lx">
        /// 0:设置玩家金钱,
        /// 1:增加玩家金钱 (0与1是游戏中途的结算) 
        /// 2:与0类似， 
        /// 3:与1类似 (2与3是游戏结束的结算) (2与3是会触发经验，与魅力的结算) 
        /// 5:给鬼加钱。 
        /// 6:增加玩家经验  
        /// 8,
        /// 9:朋友房间结算(8设置玩家分值,9是增加玩家分值) 
        /// 10: 
        /// 11,
        /// </param>
        /// <param name="num"></param>
        /// <param name="str"></param>
        /// <returns></returns>
        int SetPlayer(int seat, int lx, int num, string str);

        /// <summary>
        /// 保存朋友房数据
        /// </summary>
        /// <param name="data">桌子数据</param>
        int SaveData(byte[] data);

        /// <summary>
        /// 保存回放数据
        /// </summary>
        /// <param name="lx">回放数据的类型</param>
        /// <param name="jsondata">回放数据</param>
        void SaveHuiFang(int lx, string jsondata);

        /// <summary>
        /// 发包
        /// </summary>
        /// <param name="seat">对谁发 -1表示发全桌 其他是对某个座位发</param>
        /// <param name="data"></param>
        /// <returns></returns>
        int SendPack(int seat, byte[] data);

        /// <summary>
        /// 给算法用的，保存其他数据, 暂时只给朋友房用,实际上金币场也可以用,后面优化
        /// </summary>
        /// <param name="base64data">台桌数据</param>
        /// <returns>0保存失败 1保存成功</returns>
        int SaveOtherData(string base64data);

        /// <summary>
        /// 加载台桌数据-牌局共享数据
        /// </summary>
        /// <returns>台桌数据</returns>
        string LoadOtherData();

        /// <summary>
        /// 获取厅数据
        /// </summary>
        /// <param name="tag">厅标记</param>
        /// <returns></returns>
        object GetTingData(string tag);

        /// <summary>
        /// 获取房间数据
        /// </summary>
        /// <param name="roomid">房间id</param>
        /// <param name="tag">房间标记</param>
        /// <returns></returns>
        object GetRoomData(int roomid,string tag);

    }
}
