<?php

if (!function_exists('to_proper_case')) {
    /**
     * Ubah teks ke Proper Case (huruf pertama setiap kata kapital).
     */
    function to_proper_case(?string $text): string
    {
        if ($text === null || trim($text) === '') {
            return '';
        }

        return mb_convert_case(mb_strtolower(trim($text), 'UTF-8'), MB_CASE_TITLE, 'UTF-8');
    }
}

if (!function_exists('format_tanggal_indonesia')) {
    /**
     * Format tanggal ke bahasa Indonesia, contoh: 7 Juni 2026
     */
    function format_tanggal_indonesia(?string $date): string
    {
        if (!$date) {
            return '-';
        }

        $bulan = [
            1  => 'Januari', 2 => 'Februari', 3 => 'Maret', 4 => 'April',
            5  => 'Mei', 6 => 'Juni', 7 => 'Juli', 8 => 'Agustus',
            9  => 'September', 10 => 'Oktober', 11 => 'November', 12 => 'Desember',
        ];

        $ts = strtotime($date);
        $d  = (int) date('j', $ts);
        $m  = (int) date('n', $ts);
        $y  = date('Y', $ts);

        return "{$d} {$bulan[$m]} {$y}";
    }
}

if (!function_exists('format_wilayah')) {
    /**
     * Tambahkan prefix wilayah (Kec./Kab.) jika belum ada.
     */
    function format_wilayah(string $prefix, ?string $value): string
    {
        if (!$value || trim($value) === '') {
            return '';
        }

        $value = trim($value);
        $check = rtrim(str_replace('.', '', $prefix));

        if (stripos($value, $check) === 0) {
            return $value;
        }

        return $prefix . ' ' . $value;
    }
}

if (!function_exists('format_alamat_kop')) {
    /**
     * Susun alamat sekolah untuk kop surat.
     */
    function format_alamat_kop(array $settings): string
    {
        $parts = array_filter([
            $settings['address'] ?? '',
            $settings['village'] ?? '',
            format_wilayah('Kec.', $settings['district'] ?? ''),
            format_wilayah('Kab.', $settings['city'] ?? ''),
        ]);

        return implode(', ', $parts);
    }
}

if (!function_exists('terbilang_hari')) {
    /**
     * Terbilang untuk jumlah hari (1–30), untuk keperluan SPPD.
     * Contoh: terbilang_hari(3) → "tiga"
     */
    function terbilang_hari(int $n): string
    {
        $satuan = [
            '', 'satu', 'dua', 'tiga', 'empat', 'lima',
            'enam', 'tujuh', 'delapan', 'sembilan', 'sepuluh',
            'sebelas', 'dua belas', 'tiga belas', 'empat belas', 'lima belas',
            'enam belas', 'tujuh belas', 'delapan belas', 'sembilan belas',
        ];

        if ($n <= 0) return 'nol';
        if ($n < 20) return $satuan[$n];
        if ($n < 30) return 'dua puluh' . ($n % 10 ? ' ' . $satuan[$n % 10] : '');
        if ($n === 30) return 'tiga puluh';

        return (string) $n; // fallback
    }
}