;================================================================
; mahjong/mahjong_utils 麻将游戏 工具函数
; mahjong_tile.erb 单张麻将牌相关
;================================================================


;;;将麻将牌ID转换为麻将牌的值
;;;- int tile_id 麻将牌ID
;;;@return 麻将牌值
@mj_id_to_value(tile_id)
#FUNCTION
    #DIM tile_id
    #DIM DYNAMIC suit
    #DIM DYNAMIC rank
    suit = tile_id / 100
    rank = tile_id % 100 / 10
    SELECTCASE suit
        CASE 1, 2, 3
            SIF tile_id % 100 == 54
                RETURNF suit * 10  ; 单独处理赤宝牌
        CASE 4
            SIF rank < 1 || rank > 7
                RETURNF 0
        CASEELSE
            RETURNF 0
    ENDSELECT
    RETURNF suit * 10 + rank


;;;将麻将牌代码转换为麻将牌的值
;;;- str tile_code 麻将牌代码
;;;@return 麻将牌值
@mj_code_to_value(tile_code)
#FUNCTION
    #DIMS tile_code
    #DIM DYNAMIC idx
    SIF STRLENSU(tile_code) != 2
        RETURNF 0
    idx = FINDELEMENT(MJ_ENUM_TILE_CODE, tile_code, 0, , 1)
    SIF idx < 0
        RETURNF 0
    RETURNF MJ_ENUM_TILE_VALUE:idx


;;;将麻将牌转换为麻将牌代码
;;;- int tile 麻将牌(ID或值)
;;;@return 麻将牌代码
@mj_to_code(tile)
#FUNCTIONS
    #DIM tile
    #DIM DYNAMIC tile_value
    #DIM DYNAMIC idx
    tile_value = tile > 100 ? mj_id_to_value(tile) # tile
    idx = FINDELEMENT(MJ_ENUM_TILE_VALUE, tile_value, 0, , 1)
    SIF idx < 0
        RETURNF ""
    RETURNF MJ_ENUM_TILE_CODE:idx


;;;将麻将牌代码转换为可读文本
;;;@return 麻将牌文本
@mj_humanize(tile_code)
#FUNCTIONS
    #DIMS tile_code
    RETURNF tr(@"tile:%tile_code%")
