<?php

if (! function_exists('rupiah')) {
    /**
     * Format angka ke format Rupiah Indonesia.
     * Contoh: rupiah(15000) → "Rp 15.000"
     */
    function rupiah(float|int|string $amount, bool $withPrefix = true): string
    {
        $formatted = number_format((float) $amount, 0, ',', '.');
        return $withPrefix ? 'Rp ' . $formatted : $formatted;
    }
}

if (! function_exists('rupiah_short')) {
    /**
     * Format singkat untuk angka besar.
     * Contoh: rupiah_short(1500000) → "1,5jt"
     */
    function rupiah_short(float|int $amount): string
    {
        if ($amount >= 1_000_000_000) {
            return 'Rp ' . number_format($amount / 1_000_000_000, 1, ',', '.') . 'M';
        }
        if ($amount >= 1_000_000) {
            return 'Rp ' . number_format($amount / 1_000_000, 1, ',', '.') . 'jt';
        }
        if ($amount >= 1_000) {
            return 'Rp ' . number_format($amount / 1_000, 0, ',', '.') . 'rb';
        }
        return 'Rp ' . $amount;
    }
}

if (! function_exists('tgl_indo')) {
    /**
     * Format tanggal ke format Indonesia.
     * Contoh: tgl_indo('2024-01-15') → "15 Januari 2024"
     */
    function tgl_indo(string|\DateTimeInterface|null $date, bool $withTime = false): 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',
        ];

        $dt = $date instanceof \DateTimeInterface
            ? $date
            : \Carbon\Carbon::parse($date);

        $formatted = $dt->day . ' ' . $bulan[$dt->month] . ' ' . $dt->year;

        if ($withTime) {
            $formatted .= ' ' . $dt->format('H:i');
        }

        return $formatted;
    }
}

if (! function_exists('setting')) {
    /**
     * Shortcut ambil nilai setting aplikasi.
     * Contoh: setting('store_name', 'Toko Saya')
     */
    function setting(string $key, mixed $default = null): mixed
    {
        return \App\Models\Setting::get($key, $default);
    }
}

if (! function_exists('is_admin')) {
    /**
     * Cek apakah user yang login adalah admin.
     */
    function is_admin(): bool
    {
        return auth()->check() && auth()->user()->isAdmin();
    }
}

if (! function_exists('is_manajer')) {
    /**
     * Cek apakah user yang login adalah manajer atau admin.
     */
    function is_manajer(): bool
    {
        return auth()->check() && auth()->user()->isManajer();
    }
}

if (! function_exists('format_stok')) {
    /**
     * Format tampilan stok produk.
     * Jika tidak dilacak tampilkan ∞
     */
    function format_stok(int $stock, bool $track, string $unit = ''): string
    {
        if (! $track) return '∞';
        return $stock . ($unit ? ' ' . $unit : '');
    }
}
