<?php

if (!function_exists("setting")) {
    /**
     * Veritabanından ayar çeker.
     * Veritabanı hatası durumunda kısır döngüyü önlemek için try-catch bloğu içerir.
     */
    function setting($settingsName)
    {
        try {
            // Ayarın veritabanında önbelleğe alınıp alınmadığını kontrol et
            // Eğer sıkça çağrılıyorsa, her seferinde sorgu atmamak için:
            // static $settingsCache = [];
            // if (isset($settingsCache[$settingsName])) {
            //     return $settingsCache[$settingsName];
            // }

            $settings = \App\Models\AyarlarModel::select($settingsName)->first();

            if ($settings && isset($settings->$settingsName)) {
                // Cache'e ekle
                // $settingsCache[$settingsName] = $settings->$settingsName;
                return $settings->$settingsName;
            }
        } catch (\Throwable $e) {
            // Herhangi bir veritabanı hatası (veya başka bir hata) olursa,
            // döngüye girmemek için false dön ve uygulamanın çökmesini engelle.
            return false;
        }

        return false; // Ayar bulunamazsa veya bir hata olursa false dön
    }
}


if (!function_exists("stringToArray_generator")) {


    function stringToArray_generator($list)
    {
        if (is_array($list))
            return $list;

        return explode(",", $list);
    }
}


if (!function_exists('sefLink')) {
    function seflink($inputString, $seperator = "-")
    {
        // Türkçe karakterleri İngilizce karakterlere dönüştür
        $transliterated = Str::slug($inputString, $seperator);

        return $transliterated;
    }
}


if (!function_exists("infos")) {
    function infos($message = "", $type = 'error')
    {
        switch ($type) {
            case 'error':
                return '<div class="alert alert-danger"><a class="close" data-dismiss="alert" href="#" aria-hidden="true">×</a><strong></strong>' . $message . '</div>';
                break;
            case 'warning':
                return '<div class="alert alert-warning"><a class="close" data-dismiss="alert" href="#" aria-hidden="true">×</a><strong></strong>' . $message . '</div>';
                break;
            case 'ok':
                return '<div class="alert alert-success"><a class="close" data-dismiss="alert" href="#" aria-hidden="true">×</a><strong></strong>' . $message . '</div>';
                break;
            case 'info':
                return '<div class="alert alert-info"><a class="close" data-dismiss="alert" href="#" aria-hidden="true">×</a><strong></strong>' . $message . '</div>';
                break;
        }
    }
}

if (!function_exists("segments")) {
    function segments()
    {
        $list = request()->segments();
        if (isset($list[0]) && $list[0] == "js")
            unset($list[0]);

        return array_values($list);
    }
}


if (!function_exists("js_calistir")) {

    function js_calistir($tip, $vars, $link, $donus_div = "", $sorgulama = "")
    {
        ?>
        <script type="text/javascript">

            $(function () {
                $(document).on("click", "<?=$tip?>", function () {

                    <?php if ($sorgulama) {
                    echo "if (confirm('Silmek istediğinizden emin misiniz?')){  ";
                } ?>

                    <?php foreach ($vars as $key => $v) {
                    echo "var " . $v . ' = $(this).attr("' . $v . '"); ';
                } ?>

                    $(".myModalclose").click();
                    //$(".modal-backdrop").removeClass();
                    var csrfToken = $('meta[name="csrf-token"]').attr('content');
                    $.ajaxSetup({
                        headers: {
                            'X-CSRF-TOKEN': csrfToken
                        }
                    });
                    $.post(
                        "<?=$link?>",
                        {
                            sayfaid: $("#sayfaid").val() <?php foreach ($vars as $key => $v) {
                                echo ",";
                                echo '"' . $v . '" : ' . $v;
                            } ?>},
                        function (veri) {
                            $("<?=$donus_div?>").html(veri);
                        });
                    <?php if ($sorgulama) {
                    echo "}";
                } ?>

                });
            });

        </script>
        <?php

    }
}

if (!function_exists("js_form_kaydet")) {

    function js_form_kaydet($tip, $fadi = "", $url = "", $donus_div = "", $sorgulama = "", $yazi = "Silmek istediğinizden emin misiniz?", $vars = array())
    {
        ?>
        <script type="text/javascript">

            $(function () {
                $(document).on("click", "<?=$tip?>", function () {

                    <?php if ($sorgulama) {
                    echo "if (confirm('$yazi')){  ";
                } ?>

                    $('#myModal').modal('hide');

                    var bilgi = $('<?=$fadi;?>').serialize();

                    var csrfToken = $('meta[name="csrf-token"]').attr('content');

                    /*
                       ,     headers: {
                        "X-CSRF-TOKEN": csrfToken // CSRF tokenini başlık olarak ekleyin
                    },
                    * */

                    $.ajaxSetup({
                        headers: {
                            'X-CSRF-TOKEN': csrfToken
                        }
                    });

                    $.post(
                        "<?=$url?>",

                        {
                            "bilgi": bilgi, sayfaid: $("#sayfaid").val() <?php if ($vars) {
                                foreach ($vars as $key => $v) {
                                    echo ",";
                                    echo '"' . $key . '" : ' . $v;
                                }
                            } ?>},
                        function (veri) {
                            $("<?=$donus_div?>").html(veri);
                        });

                    <?php if ($sorgulama) {
                    echo "}";
                } ?>

                });
            });

        </script>
        <?php

    }
}


if (!function_exists("cut_string")) {
    function cut_string($string, $leng = 50)
    {
        if (strlen($string) > $leng) {
            $par = mb_substr($string, 0, $leng, "UTF-8") . "..";
        } else {
            $par = $string;
        }
        return $par;
    }

}
if (!function_exists("datetr")) {
    function datetr($format, $datetime = 'now')
    {
        $z = date("$format", strtotime($datetime));
        $gun_dizi = array(
            'Monday' => 'Pazartesi',
            'Tuesday' => 'Salı',
            'Wednesday' => 'Çarşamba',
            'Thursday' => 'Perşembe',
            'Friday' => 'Cuma',
            'Saturday' => 'Cumartesi',
            'Sunday' => 'Pazar',
            'January' => 'Ocak',
            'February' => 'Şubat',
            'March' => 'Mart',
            'April' => 'Nisan',
            'May' => 'Mayıs',
            'June' => 'Haziran',
            'July' => 'Temmuz',
            'August' => 'Ağustos',
            'September' => 'Eylül',
            'October' => 'Ekim',
            'November' => 'Kasım',
            'December' => 'Aralık',
            'Mon' => 'Pts',
            'Tue' => 'Sal',
            'Wed' => 'Çar',
            'Thu' => 'Per',
            'Fri' => 'Cum',
            'Sat' => 'Cts',
            'Sun' => 'Paz',
            'Jan' => 'Oca',
            'Feb' => 'Şub',
            'Mar' => 'Mar',
            'Apr' => 'Nis',
            'Jun' => 'Haz',
            'Jul' => 'Tem',
            'Aug' => 'Ağu',
            'Sep' => 'Eyl',
            'Oct' => 'Eki',
            'Nov' => 'Kas',
            'Dec' => 'Ara',
        );
        foreach ($gun_dizi as $en => $tr) {
            $z = str_replace($en, $tr, $z);
        }
        if (strpos($z, 'Mayıs') !== false && strpos($format, 'F') === false) $z = str_replace('Mayıs', 'May', $z);
        return $z;
    }

}


if (!function_exists("urlGenerator")) {

    function urlGenerator($url, $newVals = [], $nonGet = [])
    {
        $link = [];

        foreach ($_GET as $key => $val) {
            if ($key != "link")
                if (!in_array($key, $nonGet)) {
                    $link[$key] = $val;
                }
        }

        foreach ($newVals as $key => $val) {
            if (!in_array($key, $nonGet)) {
                $link[$key] = $val;
            }
        }

        $linkX = "";

        foreach ($link as $key => $val) {
            $linkX .= $key . "=" . $val . "&";
        }

        return $url . (($linkX) ? "?" : "") . $linkX;


    }
}


if (!function_exists("getDBSetting")) {
    function getDBSetting($settingsName)
    {

        //$langName = App::getLocale(); // Türkçe


        $settings = \Illuminate\Support\Facades\DB::connection("globaldb")->table("template_" . setting("template_name"))->where("site_id",setting("site_id"))->select("$settingsName")->first();

        if ($settings == "standart_dil_kodu")
            dd($settingsName);

        if (isset($settings->$settingsName) && $settings->$settingsName) {
            return $settings->$settingsName;
        } else {
            return false;
        }
    }
}
if (!function_exists("security")) {

    function security($yazi, $st = true)
    {
        if ($st) {
            return htmlspecialchars(addslashes(trim($yazi)));
        } else {
            return addslashes(trim($yazi));
        }
    }
}


if (!function_exists("upanel")) {

    function upanel($text, $status = 99, $type = "danger", $otherArray = [])
    {
        return json_encode(array_merge(["status" => $status, "type" => $type, "text" => $text], $otherArray));
    }
}
if (!function_exists("IpAdressRead")) {

    function IpAdressRead()
    {
        if (getenv("HTTP_CLIENT_IP")) {
            $ip = getenv("HTTP_CLIENT_IP");
        } elseif (getenv("HTTP_X_FORWARDED_FOR")) {
            $ip = getenv("HTTP_X_FORWARDED_FOR");
            if (strstr($ip, ',')) {
                $tmp = explode(',', $ip);
                $ip = trim($tmp[0]);
            }
        } else {
            $ip = getenv("REMOTE_ADDR");
        }
        return $ip;
    }
}

if (!function_exists("Random")) {

    function Random($charlen = 25, $characters = "")
    {
        if (!$characters)
            $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

        $randstring = '';
        for ($i = 0; $i < $charlen; $i++) {
            $randstring .= $characters[rand(0, strlen($characters) - 1)];
        }
        return $randstring;
    }
}
if (!function_exists("security_entegrasyon")) {
    function security_entegrasyon($yetkiadi)
    {

        $siteid = setting("site_id");

        $list = \App\Models\GLOBAL_SiteEntegrasyonListesiModel::where("site_id", $siteid)->whereIn("entegrasyon_id", explode(",", $yetkiadi))->where("aktiflik", 1)->get();

        if (isset($list[0])) {
            return true;
        } else {
            return false;
        }
    }
}

if (!function_exists("site_yetki")) {


    function site_yetki($yetkiadi)
    {

        $list = explode(",", $yetkiadi);
        /*if($yetkiadi)
        foreach ($list as $k => $v) {
            if (\Illuminate\Support\Facades\Auth::user()->can($yetkiadi)) {
                return true;

            }
        }*/

        $role = \Silber\Bouncer\Database\Role::find(\Illuminate\Support\Facades\Auth::user()->yetki_id);

        foreach ($list as $k => $yetkiadi) {
            if ($role->can($yetkiadi)) {
                return true;
            }
        }

        return false;
    }
}

if (!function_exists("fiyatHesapla")) {


    function fiyatHesapla($fiyat, $kdv_dahil_mi, $kdv_orani, $indirim_tipi = 'yuzde', $indirim_degeri = 0)
    {
        // 1. Adım: Önce fiyatı KDV HARİÇ (Ham) hale getiriyoruz
        if ($kdv_dahil_mi) {
            // Formül: Fiyat / (1 + (KDV/100))
            $ham_fiyat = $fiyat / (1 + ($kdv_orani / 100));
        } else {
            $ham_fiyat = $fiyat;
        }

        // 2. Adım: İndirimi Hesapla (Ham fiyat üzerinden)
        $indirim_tutari = 0;

        if ($indirim_degeri > 0) {
            if ($indirim_tipi == 'yuzde') {
                $indirim_tutari = $ham_fiyat * ($indirim_degeri / 100);
            } else {
                // Tutar bazlı indirim
                $indirim_tutari = $indirim_degeri;
            }
        }

        // İndirim fiyattan büyükse fiyatı 0'a sabitle (Negatif olmaması için)
        if ($indirim_tutari > $ham_fiyat) {
            $indirim_tutari = $ham_fiyat;
        }

        // İndirimli Ham Fiyat (Matrah)
        $indirimli_ham_fiyat = $ham_fiyat - $indirim_tutari;

        // 3. Adım: KDV Tutarını Hesapla (İndirimli tutar üzerinden)
        $kdv_tutari = $indirimli_ham_fiyat * ($kdv_orani / 100);

        // 4. Adım: Genel Toplam
        $genel_toplam = $indirimli_ham_fiyat + $kdv_tutari;

        // Sonuçları yuvarlayarak döndür (2 hane kuruş hassasiyeti)
        return [
            'giris_fiyati'        => (float) $fiyat,
            'ham_fiyat'           => round($ham_fiyat, 4),        // İndirimsiz, KDV'siz
            'indirim_tutari'      => round($indirim_tutari, 4),   // Yapılan indirim miktarı
            'matrah'              => round($indirimli_ham_fiyat, 4), // KDV'nin uygulanacağı tutar
            'kdv_orani'           => $kdv_orani,
            'kdv_tutari'          => round($kdv_tutari, 2),       // Devlete ödenecek KDV
            'genel_toplam'        => round($genel_toplam, 2)      // Müşterinin ödeyeceği tutar
        ];
    }
}


if (!function_exists('crudv2_stringToArray')) {
    /**
     * String veya array'i array'e çevir
     */
    function crudv2_stringToArray($input): array
    {
        if (is_array($input)) return $input;
        if (empty($input)) return [];
        return array_map('trim', explode(',', (string)$input));
    }
}

if (!function_exists('crudv2_seflink')) {
    /**
     * SEF link üretici - Türkçe karakter desteği
     */
    function crudv2_seflink(string $str, string $separator = '-'): string
    {
        $str = mb_strtolower(trim($str), 'UTF-8');

        $tr = [
            'ç' => 'c', 'ğ' => 'g', 'ı' => 'i', 'ö' => 'o',
            'ş' => 's', 'ü' => 'u', 'Ç' => 'c', 'Ğ' => 'g',
            'İ' => 'i', 'Ö' => 'o', 'Ş' => 's', 'Ü' => 'u',
            'â' => 'a', 'î' => 'i', 'û' => 'u',
        ];

        $str = strtr($str, $tr);
        $str = preg_replace('/[^a-z0-9]/', $separator, $str);
        $str = preg_replace('/' . preg_quote($separator, '/') . '+/', $separator, $str);

        return trim($str, $separator);
    }
}

// Eski fonksiyonlarla uyumluluk
if (!function_exists('stringToArray_generator')) {
    function stringToArray_generator($input): array
    {
        return crudv2_stringToArray($input);
    }
}

if (!function_exists('seflink')) {
    function seflink(string $str, string $separator = '-'): string
    {
        return crudv2_seflink($str, $separator);
    }
}

if (!function_exists('infos')) {
    function infos($message): string
    {
        return (string)$message;
    }
}
