package kok

import (
	"context"
	"regexp"
	FikoYTCtx "server/sistem/fikoyt_ctx"
	FikoYTHata "server/sistem/fikoyt_ctx/fikoyt_hata"
	FikoYTMap "server/sistem/fikoyt_map"

	"github.com/gofiber/fiber/v3"
)

func fikoyt_sistem_uye_ol(c fiber.Ctx) error {
	FikoYT := c.Locals("FikoYTCtx").(*FikoYTCtx.FikoYTCtx)

	// if len(FikoYT.Istek.Dosyalar) > 0 {
	// 	dosya := FikoYT.Istek.Dosyalar[0]
	// 	dosya.Kaydet()
	// 	dosya.Isle()
	// 	dosya.KaydetGridFs(fiber.Map{"test": "deneme"})
	// 	dosya.TemizleDosyalar()
	// }

	// if true {
	// 	return nil
	// }

	// Birden fazla hata örneği
	if FikoYT.Istek.Json["anlasma"] == false {
		FikoYT.Cevap.Durum.Hatalar.Ekle(FikoYTHata.YeniFikoYTHataAnlasmaOnaylama().FikoYTHata)
	}
	///
	epostaPattern := `^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$`
	matched, _ := regexp.MatchString(epostaPattern, FikoYT.Istek.Json["ePosta"].(string))
	if !matched {
		FikoYT.Cevap.Durum.Hatalar.Ekle(FikoYTHata.YeniFikoYTHataTurHatasi("E-Posta").FikoYTHata)
	}
	///
	if FikoYT.Istek.Json["parola"] != FikoYT.Istek.Json["parolaTekrar"] {
		if FikoYT.Istek.Json["parola"] != "" || FikoYT.Istek.Json["parolaTekrar"] != "" {
			FikoYT.Cevap.Durum.Hatalar.Ekle(FikoYTHata.YeniFikoYTHataAyniDegilHatasi("Parola", "Parola Tekrar", nil).FikoYTHata)
		}
	}
	///
	kullaniciAdi := FikoYT.Istek.Json["kullaniciAdi"]
	goUyeler := FikoYT.Koleksiyon("goUyeler")
	if kullaniciAdi != nil {
		var kytUye FikoYTMap.FikoYTMap
		_ = goUyeler.FindOne(context.TODO(), fiber.Map{"kullaniciAdi": kullaniciAdi}).Decode(&kytUye)
		if kytUye != nil {
			FikoYT.Cevap.Durum.Hatalar.Ekle(FikoYTHata.YeniFikoYTHataKullaniciMevcutHatasi(kullaniciAdi.(string), nil).FikoYTHata)
		}
	}
	///
	eposta := FikoYT.Istek.Json["ePosta"]
	if eposta != nil {
		var kytEposta FikoYTMap.FikoYTMap
		_ = goUyeler.FindOne(context.TODO(), fiber.Map{"ePosta": eposta}).Decode(&kytEposta)
		if kytEposta != nil {
			FikoYT.Cevap.Durum.Hatalar.Ekle(FikoYTHata.YeniFikoYTHataEPostaMevcutHatasi(eposta.(string), nil).FikoYTHata)
		}
	}
	///

	if len(FikoYT.Cevap.Durum.Hatalar) > 0 {
		FikoYT.Cevap.AyarlaDurumKodu(499)
		FikoYT.Cevap.Durum.Hata = true

		return nil
	}

	///
	// FikoYT.Cevap.Sonuc = nil
	FikoYT.Cevap.AyarlaDurumKodu(200)

	FikoYT.Istek.Json["aktifDurum"] = "Aktif"

	FikoYT.Istek.Json["parola"] = parolaSifrele(FikoYT.Istek.Json["parola"].(string))
	delete(FikoYT.Istek.Json, "parolaTekrar")

	epostaOnayKodu := epostaOnayKoduFonksiyonu(FikoYT.Istek.Json["isim"].(string), FikoYT.Istek.Json["soyIsim"].(string), FikoYT.Istek.Json["kullaniciAdi"].(string))

	FikoYT.Istek.Json["epostaOnayKodu"] = epostaOnayKodu

	rslt, _ :=
		goUyeler.InsertOne(context.TODO(), FikoYT.Istek.Json)

	if len(FikoYT.Istek.Dosyalar) > 0 {
		dosya := FikoYT.Istek.Dosyalar[0]
		dosya.Kaydet()
		dosya.Isle()
		dosya.KaydetGridFs(fiber.Map{"yol": "./profilResimleri", "kid": rslt.InsertedID})
		dosya.TemizleDosyalar()
	}
	FikoYT.Cevap.Sonuc = true

	return c.Status(200).JSON(true)
}
