package main

// IstekOlayTuru: HTTP olay türlerini temsil eden enum
type IstekOlayTuru int

const (
	Istendi IstekOlayTuru = iota
	IlerlemeIstek
	BaslikCevap
	IlerlemeCevap
	Cevaplandi
	Ozel
)

// FikoYTHata: Hata yapısı
type FikoYTHata struct {
	Kodu  string `json:"kodu"`
	Mesaj string `json:"mesaj"`
}

// IstekIlerleme: İstek ilerlemesi bilgisi
type IstekIlerleme struct {
	Toplam int `json:"toplam"`
	Durum  int `json:"durum"`
	Yuzde  int `json:"yuzde"`
}

// IstekDurum: İstek durumu, hata bilgileri
type IstekDurum struct {
	Hata    *bool        `json:"hata,omitempty"`
	Hatalar []FikoYTHata `json:"hatalar,omitempty"`
}

// IstekGiden: Gönderilen istek verisi
type IstekGiden struct {
	Ismi         string        `json:"ismi"`
	Parametreler []interface{} `json:"parametreler,omitempty"`
	Form         interface{}   `json:"form,omitempty"`
	Kwargs       interface{}   `json:"kwargs,omitempty"`
	Json         interface{}   `json:"json,omitempty"`
}

// IstekSonuc: İstek sonucu ve ilgili bilgiler
type IstekSonuc struct {
	Turu     IstekOlayTuru  `json:"turu,omitempty"`
	Ilerleme *IstekIlerleme `json:"ilerleme,omitempty"`
	Durum    *IstekDurum    `json:"durum,omitempty"`
	Istek    *IstekGiden    `json:"istek,omitempty"`
	Sonuc    interface{}    `json:"sonuc,omitempty"`
}

// func main() {
//     // Örnek kullanım
//     istekDurum := IstekDurum{
//         Hata:   BoolPtr(true),
//         Hatalar: []FikoYTHata{{Kodu: "404", Mesaj: "Bulunamadı"}},
//     }

//     istekSonuc := IstekSonuc{
//         Turu:   Istendi,
//         Durum:  &istekDurum,
//         Sonuc:  "Başarıyla tamamlandı",
//     }

//     fmt.Printf("İstek Sonucu: %+v\n", istekSonuc)
// }

// // BoolPtr: bool değerini pointer olarak döndüren yardımcı fonksiyon
// func BoolPtr(b bool) *bool {
//     return &b
// }
