"""
เวลา - Thai wrapper for Python's datetime module
A library that provides Thai-named access to date and time functions.

Usage:
    import เวลา
    ตอนนี้ = เวลา.ตอนนี้()
    สร้าง = เวลา.สร้างวันที่(2024, 3, 19)
"""

from datetime import datetime, date, time, timedelta
import time as time_module

# Sleep and performance timing
def นอน(วินาที):
    """นอนชั่วคราว (sleep)"""
    time_module.sleep(วินาที)

def นอนมิลลิวินาที(มิลลิวินาที):
    """นอนชั่วคราว (นับเป็นมิลลิวินาที)"""
    time_module.sleep(มิลลิวินาที / 1000)

def ปัจจุบัน_วินาที():
    """ดึงเวลาปัจจุบัน (วินาที หลังจาก epoch)"""
    return time_module.time()

def วัดเวลา():
    """ดึงนาฬิกาประสิทธิภาพสูงเพื่อวัดเวลา"""
    return time_module.perf_counter()

def รีเซตนาฬิกา():
    """รีเซตนาฬิกา perf_counter"""
    return time_module.perf_counter()

# Current time
def ตอนนี้():
    """ดึงเวลาปัจจุบัน"""
    return datetime.now()

def วันนี้():
    """ดึงวันที่ปัจจุบัน"""
    return date.today()

def ตอนนี้_utc():
    """ดึงเวลาปัจจุบัน (UTC)"""
    return datetime.utcnow()

def เวลาตอนนี้():
    """ดึงเวลาปัจจุบัน (เฉพาะเวลา ไม่มีวันที่) (time)"""
    return datetime.now().time()

มะรุ่งนี้ = เวลาตอนนี้  # backward-compat alias (ชื่อเดิมไม่ตรงความหมาย)

# Creating dates
def สร้างวันที่(ปี, เดือน, วัน):
    """สร้างวันที่จากปี/เดือน/วัน"""
    return date(ปี, เดือน, วัน)

def สร้างเวลา(ชั่วโมง=0, นาที=0, วินาที=0, ไมโครวินาที=0):
    """สร้างเวลาจากชั่วโมง/นาที/วินาที"""
    return time(ชั่วโมง, นาที, วินาที, ไมโครวินาที)

def สร้างวันเวลา(ปี, เดือน, วัน, ชั่วโมง=0, นาที=0, วินาที=0):
    """สร้างวันที่และเวลา"""
    return datetime(ปี, เดือน, วัน, ชั่วโมง, นาที, วินาที)

def จากข้อความ(ข้อความ, รูปแบบ='%Y-%m-%d'):
    """แปลงข้อความเป็นวันที่ตามรูปแบบ"""
    return datetime.strptime(ข้อความ, รูปแบบ)

# Formatting
def เป็นข้อความ(วันเวลา, รูปแบบ='%Y-%m-%d %H:%M:%S'):
    """แปลงวันเวลาเป็นข้อความ"""
    return วันเวลา.strftime(รูปแบบ)

def เป็นข้อความไทย(วันเวลา):
    """แปลงวันเวลาเป็นรูปแบบภาษาไทย"""
    วันไทย = ['จันทร์', 'อังคาร', 'พุธ', 'พฤหัส', 'ศุกร์', 'เสาร์', 'อาทิตย์']
    เดือนไทย = ['', 'มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน',
                'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม']
    
    วัน_สัปดาห์ = วันไทย[วันเวลา.weekday()]
    วัน = วันเวลา.day
    เดือน = เดือนไทย[วันเวลา.month]
    ปี = วันเวลา.year + 543  # Buddhist Era
    
    return f"{วัน_สัปดาห์} ที่ {วัน} {เดือน} พ.ศ. {ปี}"

# Manipulation
def เพิ่มวัน(วันเวลา, จำนวนวัน):
    """เพิ่มจำนวนวันให้กับวันที่"""
    return วันเวลา + timedelta(days=จำนวนวัน)

def เพิ่มชั่วโมง(วันเวลา, จำนวนชั่วโมง):
    """เพิ่มชั่วโมงให้กับเวลา"""
    return วันเวลา + timedelta(hours=จำนวนชั่วโมง)

def เพิ่มนาที(วันเวลา, จำนวนนาที):
    """เพิ่มนาทีให้กับเวลา"""
    return วันเวลา + timedelta(minutes=จำนวนนาที)

def เพิ่มวินาที(วันเวลา, จำนวนวินาที):
    """เพิ่มวินาทีให้กับเวลา"""
    return วันเวลา + timedelta(seconds=จำนวนวินาที)

def หารวัน(วันเวลา, จำนวนวัน):
    """ลบจำนวนวันจากวันที่"""
    return วันเวลา - timedelta(days=จำนวนวัน)

def ห่างกี่วัน(วันเวลา1, วันเวลา2):
    """คำนวณระยะห่างระหว่างวันที่ (จำนวนวัน)"""
    ผลต่าง = วันเวลา1 - วันเวลา2
    return ผลต่าง.days

def ห่างกี่วินาที(วันเวลา1, วันเวลา2):
    """คำนวณระยะห่างระหว่างเวลา (จำนวนวินาที)"""
    ผลต่าง = วันเวลา1 - วันเวลา2
    return ผลต่าง.total_seconds()

# Date properties
def วันของสัปดาห์(วันที่):
    """ดึงวันของสัปดาห์ (0=จันทร์, 6=อาทิตย์)"""
    return วันที่.weekday()

def ชื่อวันสัปดาห์(วันที่):
    """ดึงชื่อวันของสัปดาห์"""
    วันไทย = ['จันทร์', 'อังคาร', 'พุธ', 'พฤหัส', 'ศุกร์', 'เสาร์', 'อาทิตย์']
    return วันไทย[วันที่.weekday()]

def จำนวนวันในเดือน(ปี, เดือน):
    """ดึงจำนวนวันในเดือนที่กำหนด"""
    if เดือน == 2:
        # February - check for leap year
        if (ปี % 4 == 0 and ปี % 100 != 0) or (ปี % 400 == 0):
            return 29
        else:
            return 28
    elif เดือน in [4, 6, 9, 11]:
        return 30
    else:
        return 31

def ปีอธิกสุรทิน(ปี):
    """ตรวจสอบว่าเป็นปีอธิกสุรทินหรือไม่ (leap year)"""
    return (ปี % 4 == 0 and ปี % 100 != 0) or (ปี % 400 == 0)

# Compatibility aliases
วันที่ = date
เวลา = time
ระยะเวลา = timedelta

__all__ = [
    # Sleep and timing
    "นอน",
    "นอนมิลลิวินาที",
    "ปัจจุบัน_วินาที",
    "วัดเวลา",
    "รีเซตนาฬิกา",
    # Current
    "ตอนนี้",
    "วันนี้",
    "ตอนนี้_utc",
    "เวลาตอนนี้",
    "มะรุ่งนี้",  # backward-compat alias
    # Creating
    "สร้างวันที่",
    "สร้างเวลา",
    "สร้างวันเวลา",
    "จากข้อความ",
    # Formatting
    "เป็นข้อความ",
    "เป็นข้อความไทย",
    # Manipulation
    "เพิ่มวัน",
    "เพิ่มชั่วโมง",
    "เพิ่มนาที",
    "เพิ่มวินาที",
    "หารวัน",
    "ห่างกี่วัน",
    "ห่างกี่วินาที",
    # Properties
    "วันของสัปดาห์",
    "ชื่อวันสัปดาห์",
    "จำนวนวันในเดือน",
    "ปีอธิกสุรทิน",
    # Aliases
    "วันที่",
    "เวลา",
    "ระยะเวลา",
]
