"""
สุ่ม - Thai wrapper for Python's random module
A library that provides Thai-named access to random functions.

Usage:
    import สุ่ม
    เลข = สุ่ม.จำนวนเต็ม(1, 100)
    เลือก = สุ่ม.เลือกจากรายการ([1, 2, 3])
"""

import random

# Basic random functions
def สุ่ม():
    """สุ่มตัวเลขทศนิยมระหว่าง 0.0 ถึง 1.0"""
    return random.random()

def จำนวนเต็ม(ต่ำสุด, สูงสุด):
    """สุ่มตัวเลขเต็มระหว่าง ต่ำสุด ถึง สูงสุด (รวมอันนี้ด้วย)"""
    return random.randint(ต่ำสุด, สูงสุด)

def ทศนิยม(ต่ำสุด, สูงสุด):
    """สุ่มตัวเลขทศนิยมระหว่าง ต่ำสุด ถึง สูงสุด"""
    return random.uniform(ต่ำสุด, สูงสุด)

def เกาส์(ค่ากลาง=0.0, ส่วนเบี่ยงเบน=1.0):
    """สุ่มตัวเลขตามการแจกแจงแบบปกติ (normal distribution)"""
    return random.gauss(ค่ากลาง, ส่วนเบี่ยงเบน)

def เลขชี้กำลัง(แลมบ์ดา=1.0):
    """สุ่มตัวเลขตามการแจกแจงแบบเลขชี้กำลัง"""
    return random.expovariate(แลมบ์ดา)

# Selection functions
def เลือกจากรายการ(รายการ):
    """เลือกสมาชิกหนึ่งตัวสุ่มจากรายการ"""
    return random.choice(รายการ)

def เลือกหลายตัว(รายการ, จำนวน, แทนที่=False):
    """เลือกสมาชิกหลายตัวสุ่มจากรายการ"""
    if แทนที่:
        return random.choices(รายการ, k=จำนวน)
    else:
        return random.sample(รายการ, จำนวน)

def สลับลำดับ(รายการ):
    """สลับลำดับของรายการแบบสุ่ม"""
    random.shuffle(รายการ)
    return รายการ

# Table/Deck functions
def ผสมสำรับ(สำรับ):
    """ผสมสำรับการ์ด (shuffle deck)"""
    random.shuffle(สำรับ)
    return สำรับ

def ดึงการ์ด(สำรับ):
    """ดึงการ์ดหนึ่งใบสุ่มจากสำรับ (ถาวร)"""
    return random.choice(สำรับ)

def หยิบการ์ด(สำรับ):
    """หยิบการ์ดหนึ่งใบสุ่มจากสำรับ (ลบออก)"""
    return สำรับ.pop(random.randint(0, len(สำรับ) - 1))

# Weighted choices
def เลือกโดยน้ำหนัก(รายการ, น้ำหนัก, จำนวน=1):
    """เลือกสมาชิกจากรายการตามน้ำหนัก (weighted choice)"""
    return random.choices(รายการ, weights=น้ำหนัก, k=จำนวน)

# Probability
def เหรียญ():
    """หยิบเหรียญสุ่ม (True=หัว, False=ก้อย)"""
    return random.choice([True, False])

def เหรียญชี้(โอกาส=0.5):
    """โยนเหรียญโดยมีโอกาสชี้ เป็นจริง"""
    return random.random() < โอกาส

def ลูกเต๋า(หน้า=6):
    """โยนลูกเต๋า (1 ถึง หน้า)"""
    return random.randint(1, หน้า)

def โยนลูกเต๋าหลายตัว(จำนวนลูก, หน้า=6):
    """โยนลูกเต๋าหลายตัว"""
    return [random.randint(1, หน้า) for _ in range(จำนวนลูก)]

def ตั้งค่าเมล็ด(เมล็ด):
    """ตั้งค่าเมล็ดเพื่อให้ผลลัพธ์สุ่มซ้ำได้ (seed)"""
    random.seed(เมล็ด)

# Compatibility aliases
สุ่มเลือก = เลือกจากรายการ
สุ่มตัวอย่าง = เลือกหลายตัว

__all__ = [
    "สุ่ม",
    "จำนวนเต็ม",
    "ทศนิยม",
    "เกาส์",
    "เลขชี้กำลัง",
    "เลือกจากรายการ",
    "สุ่มเลือก",
    "เลือกหลายตัว",
    "สุ่มตัวอย่าง",
    "สลับลำดับ",
    "ผสมสำรับ",
    "ดึงการ์ด",
    "หยิบการ์ด",
    "เลือกโดยน้ำหนัก",
    "เหรียญ",
    "เหรียญชี้",
    "ลูกเต๋า",
    "โยนลูกเต๋าหลายตัว",
    "ตั้งค่าเมล็ด",
]
