<?php
namespace common\components;

class Thai
{
    public static $thaiMoney = array("", "สิบ", "ร้อย", "พัน", "หมื่น", "แสน");
    public static $thaiReadNumber = array("ศูนย์", "หนึ่ง", "สอง", "สาม", "สี่", "ห้า", "หก", "เจ็ด", "แปด", "เก้า");
    public static $thaiReadNumberSib = array("", "", "ยี่", "สาม", "สี่", "ห้า", "หก", "เจ็ด", "แปด", "เก้า");
    public static $thaiReadNumberBaht = array("", "เอ็ด", "สอง", "สาม", "สี่", "ห้า", "หก", "เจ็ด", "แปด", "เก้า");
    
    
    /**
     * แปลงตัวเลขพร้อมทศนิยม 2 ตำแหน่ง เป็นคำอ่านเงินในภาษาไทย
     *
     * @param decimal $amount
     * @return string คำอ่านจำนวนเงิน เช่น สองแสนห้าสิบบาทแปดสิบเจ็ดสตางค์
     */
    public static function thaiBaht($amount) {
        $amount = str_replace(',', '', $amount);
        if ($amount == '') {
            return '-';
        }
    
        $baht = (string) $amount;
    
        $baht = explode(".", $baht);     // $baht[0]=บาท, $baht[1]=สตางค์
        if (!isset($baht[1])) {
            if ((!is_numeric((int) $baht[0]))) {
                return '-';
            }
        } else {
            if ((!is_numeric((int) $baht[0])) || (!is_numeric((int) $baht[1]))) {
                return '-';
            }
        }
    
    
        $len = strlen($baht[0]);
        if ($len != 0) {
            if ($len == 1) {
                $str = self::$thaiReadNumber[$baht[0]];
            } else {
                $ctrl = 0;
                while ($len >= 1) {
                    if ($len >= 6) {
                        $arr[$ctrl++] = substr($baht[0], -($ctrl * 6), 6);
                    } else {
                        $arr[$ctrl++] = substr($baht[0], 0, $len);
                    }
                    $len-=6;
                }
                $str = "";
                for ($i = count($arr) - 1; $i >= 0; $i--) {
                    $sub = array();
                    $ctrl = strlen($arr[$i]) - 1;
                    if ($ctrl == 0)
                        $ctrl = 9; // fix for 1,000,000 or 1,000,000,000,000 (every 6 position)
                        for ($y = 0; $y < strlen($arr[$i]); $y++) {
                            $sub[$y] = substr($arr[$i], $y, 1);
                            if ($sub[$y] != "0") {
                                if ($ctrl == 1) {
                                    $str .= self::$thaiReadNumberSib[$sub[$y]] . self::$thaiMoney[$ctrl];
                                } elseif ($ctrl == 0) {
                                    $str .= self::$thaiReadNumberBaht[$sub[$y]] . self::$thaiMoney[$ctrl];
                                } else {
                                    $str .= self::$thaiReadNumber[$sub[$y]] . self::$thaiMoney[$ctrl];
                                }
                            } else {
                                if ($ctrl == 1)
                                    $ctrl = 9; // fix for 101,000,000 or 101
                            }
                            $ctrl--;
                        }
                        if ($i > 0) {
                            $str .= "ล้าน";
                        }
                }
            }
            $str .= "บาท";
        } else {
            $str = "";
        }
        // Satang
    
    
    
        if (isset($baht[1])) {
            $baht[1] = substr($baht[1], 0, 2);
    
            if ($baht[1] != 0) {
                $len = strlen($baht[1]);
                if ($len < 2) {
                    $baht[1] = $baht[1] . '0';
                }
                $sub = array();
                $ctrl = strlen($baht[1]) - 1;
                for ($y = 0; $y < strlen($baht[1]); $y++) {
                    $sub[$y] = substr($baht[1], $y, 1);
                    if ($sub[$y] != "0") {
                        if ($y == 0) {
                            $str .= self::$thaiReadNumberSib[$sub[$y]] . self::$thaiMoney[$ctrl];
                        } else {
                            $str .= self::$thaiReadNumberBaht[$sub[$y]] . self::$thaiMoney[$ctrl];
                        }
                    }
                    $ctrl--;
                }
                $str .= "สตางค์";
            } else {
                $str .= "ถ้วน";
            }
        } else {
            $str .= "ถ้วน";
        }
    
        return $str;
    }

     //เดือนไทย แบบย่อ
     public function getMonthShort($month)
     {
         $month = (int) $month;
         $month = $month - 1;
         $month_th = [
             'ม.ค.',
             'ก.พ.',
             'มี.ค.',
             'เม.ย.',
             'พ.ค.',
             'มิ.ย.',
             'ก.ค.',
             'ส.ค.',
             'ก.ย.',
             'ต.ค.',
             'พ.ย.',
             'ธ.ค.',
         ];
         return $month_th[$month];
     }
 
     //แปลงวันที่เป็น วันที่ 1 ม.ค. 2559
     public function getThaiDate($date)
     {
         $date = explode('-', $date);
         $y = (int) $date[0];
         $y = $y + 543;
         $date = $date[2] . ' ' . $this->getMonthShort($date[1]) . ' ' . $y;
         return $date;
     }
 

     ////เดือนไทย แบบเต็ม
     
        public function getMonthFull($month)
        {
            $month = (int) $month;
            $month = $month - 1;
            $month_th = [
                'มกราคม',
                'กุมภาพันธ์',
                'มีนาคม',
                'เมษายน',
                'พฤษภาคม',
                'มิถุนายน',
                'กรกฎาคม',
                'สิงหาคม',
                'กันยายน',
                'ตุลาคม',
                'พฤศจิกายน',
                'ธันวาคม',
            ];
            return $month_th[$month];
        }

        //แปลงวันที่เป็น วันที่ 1 มกราคม 2559
        public function getThaiDateFull($date)
        {
            // 12/04/2023 ตัวอย่างที่ส่งมา
            //แปลงเป็น 2023-04-12
            $date = explode('/', $date);
            $date = $date[2] . '-' . $date[1] . '-' . $date[0];
            $date = explode('-', $date);
            $y = (int) $date[0];
            $y = $y + 543;
            $date = $date[2] . ' ' . $this->getMonthFull($date[1]) . ' ' . $y;
            return $date;
         
             
            
        }
        
}