package model

import (
	"fmt"
	"reflect"
	//"github.com/go-rod/rod"
)

type BordroProperty struct {
	Index int
	Value string
	Id    string
	//DomType string
}

type Bordro struct {
	Sube                              BordroProperty // 0
	Bolum                             BordroProperty //
	TCKimlikNo                        BordroProperty //
	AdiSoyadi                         BordroProperty //
	NormalGun                         BordroProperty //4
	HaftaTatili                       BordroProperty //
	X75                               BordroProperty //
	EksikGunNeden                     BordroProperty //
	ArgeDestekVeTasarim               BordroProperty //
	FazlaMesai                        BordroProperty // 9
	GeceMesaisi                       BordroProperty //10
	BayramMesaisi                     BordroProperty //
	Yol                               BordroProperty //12
	YemekGun                          BordroProperty //13
	YemekTutar                        BordroProperty //
	Aile                              BordroProperty //15
	Cocuk                             BordroProperty //
	Evlenme                           BordroProperty //17
	Dogum                             BordroProperty //18
	Olum                              BordroProperty //19
	Askerlik                          BordroProperty //20
	Ozelsigorta                       BordroProperty //21
	BireyselEmeklilik                 BordroProperty //22
	HayatSigortasi                    BordroProperty //23
	PrimNet                           BordroProperty //24
	PrimBrut                          BordroProperty //
	IkramiyeNet                       BordroProperty //25
	IkramiyeBrut                      BordroProperty //
	KıdemTazminatı                    BordroProperty //28
	IhbarTazminati                    BordroProperty //29
	Bayram                            BordroProperty //30
	Yakacak                           BordroProperty //31
	HuzurHakki                        BordroProperty //32
	HediyeKart                        BordroProperty
	YakitKart                         BordroProperty
	YillikIzin                        BordroProperty
	MaasFarki                         BordroProperty
	AyirilisPaketi                    BordroProperty
	RamazanKumanyasi                  BordroProperty
	TelefonDesteği                    BordroProperty //39
	EkOdemeNet                        BordroProperty
	EkOdemeBrut                       BordroProperty
	IsAramaIzni                       BordroProperty
	Prim2                             BordroProperty //43
	Prim3                             BordroProperty
	Prim4                             BordroProperty
	CalismaIzniHarci                  BordroProperty
	OzeldurumOdenesi                  BordroProperty
	EmekliSandigiCalisanPrimi         BordroProperty
	LisanTazminati                    BordroProperty
	OdulOdenesi                       BordroProperty
	IsSonuTazminati                   BordroProperty
	VergiIstisnasiEkOdeme             BordroProperty
	KresYardimi                       BordroProperty //53
	EsnekYanHak                       BordroProperty
	AracKullanim                      BordroProperty
	EgitimDesteği                     BordroProperty
	DelegeUcreti                      BordroProperty
	HarcTutarlari                     BordroProperty
	SendikaIscilikFarkUcretleri       BordroProperty
	IsinmaDesteği                     BordroProperty
	SoforlukMesaisi                   BordroProperty
	Avans                             BordroProperty
	Icra                              BordroProperty
	Sendika                           BordroProperty
	HediyeKart2                       BordroProperty
	YemekAyni                         BordroProperty
	RamazanKumanyasiAyni              BordroProperty
	BagimliOSSKesintisi               BordroProperty
	CalismaIzniHarciAyni              BordroProperty
	TrafikCezasiKesintisi             BordroProperty
	BesKesintisi                      BordroProperty
	YakitKart2                        BordroProperty
	GrupBesPersonelPayiKesintisi      BordroProperty
	IstisnadanKaynaklananKesinti      BordroProperty
	EmekliSandigiCalisanPrimKesintisi BordroProperty
	PesinYillikIzinKesintisi          BordroProperty
	TelefonLimitAsimKesintisi         BordroProperty
	ZimmetTamirKesintisi              BordroProperty
	YakitAsimKesintisi                BordroProperty
	DigerAvanslar                     BordroProperty
	DigerKesintiler                   BordroProperty
	ZorunluBesKesintisi               BordroProperty
	ZimmetliBilgisayarTamirUcreti     BordroProperty
	HarcTutarlari2                    BordroProperty
	PrimAvansi                        BordroProperty
	MasrafKesintisi                   BordroProperty
	BireyselEmekPrimi                 BordroProperty //88
	OzelsigortaPrimi                  BordroProperty //89
	DigerIstisnalar                   BordroProperty //90
}

func getPageId(id string) string {
	switch id {
	case "NormalGun":
		return "#normalGun0" //Normal Gün
	case "HaftaTatili":
		return "#normalGun1" //, "checkbox"  Hafta Tatili
	case "X75":
		return "" //x7.5
	case "EksikGunNeden":
		return "" //Eksik Gün Neden
	case "ArgeDestekVeTasarim":
		return "" //ARGE-Destek ve Tasarım Faaliyeti
	case "FazlaMesai":
		return "#ekKazancCarpan0" //Fazla Mesai
	case "GeceMesaisi":
		return "#ekKazancCarpan1" //Gece Mesaisi
	case "BayramMesaisi":
		return "" //Bayram Mesaisi
	case "Yol":
		return "#ekKazancCarpan3" //Yol
	case "YemekGun":
		return "#ekKazancCarpan4" //Yemek (Gün)
	case "YemekTutar":
		return "" //Yemek (Tutar)
	case "Aile":
		return "#ekKazancDeger5" //Aile
	case "Cocuk":
		return "" //Çocuk
	case "Evlenme":
		return "#ekKazancDeger7" //Evlenme
	case "Dogum":
		return "#ekKazancDeger8" //Doğum
	case "Olum":
		return "#ekKazancDeger9" //Ölüm
	case "Askerlik":
		return "#ekKazancDeger10" //Askerlik
	case "Ozelsigorta":
		return "#ekKazancDeger11" //Özel Sigorta
	case "BireyselEmeklilik":
		return "#ekKazancDeger12" //Bireysel Emeklilik
	case "HayatSigortasi":
		return "#ekKazancDeger13" //Hayat Sigortası
	case "PrimNet":
		return "#ekKazancDeger14" //Prim (Net)
	case "PrimBrut":
		return "#ekKazancDeger15" //Prim (Brüt)
	case "IkramiyeNet":
		return "" //İkramiye (Net)
	case "IkramiyeBrut":
		return "" //İkramiye (Brüt)
	case "KıdemTazminatı":
		return "#ekKazancDeger16" //Kıdem Tazminatı
	case "IhbarTazminati":
		return "#ekKazancDeger17" //İhbar Tazminatı
	case "Bayram":
		return "#ekKazancDeger18" //Bayram
	case "Yakacak":
		return "#ekKazancDeger19" //Yakacak
	case "HuzurHakki":
		return "#ekKazancDeger23" //Huzur Hakkı
	case "HediyeKart":
		return "" //Hediye Kart*
	case "YakitKart":
		return "" //Yakıt Kart*
	case "YillikIzin":
		return "" //Yıllık İzin
	case "MaasFarki":
		return "" //Maaş Farkı
	case "AyirilisPaketi":
		return "" //Ayrılış Paketi
	case "RamazanKumanyasi":
		return "" //Ramazan Kumanyası*
	case "TelefonDesteği":
		return "#ekKazancDeger21" //Telefon Desteği
	case "EkOdemeNet":
		return "" //Ek Ödeme (Net)
	case "EkOdemeBrut":
		return "" //Ek Ödeme (Brüt)
	case "IsAramaIzni":
		return "" //İş Arama İzni
	case "Prim2":
		return "#ekKazancDeger20" //Prim2
	case "Prim3":
		return "" //Prim3
	case "Prim4":
		return "" //Prim4
	case "CalismaIzniHarci":
		return "" //Çalışma İzni Harç. Vb.*
	case "OzeldurumOdenesi":
		return "" //Özel Durum Ödemesi
	case "EmekliSandigiCalisanPrimi":
		return "" //Emekli Sandığı Çalışan Primi
	case "LisanTazminati":
		return "" //Lisan Tazminatı
	case "OdulOdenesi":
		return "" //Ödül Ödemesi
	case "IsSonuTazminati":
		return "" //İş Sonu Tazminatı
	case "VergiIstisnasiEkOdeme":
		return "" //Vergi İstisnası Ek Ödeme
	case "KresYardimi":
		return "#ekKazancDeger22" //Kreş Yardımı
	case "EsnekYanHak":
		return "" //Esnek Yan Hak
	case "AracKullanim":
		return "" //Araç Kullanım
	case "EgitimDesteği":
		return "" //Eğitim Desteği
	case "DelegeUcreti":
		return "" //Delege Ücreti
	case "HarcTutarlari":
		return "" //Harç Tutarları*
	case "SendikaIscilikFarkUcretleri":
		return "" //Sendika İşçilik Fark Ücretleri
	case "IsinmaDesteği":
		return "" //Isınma Desteği
	case "SoforlukMesaisi":
		return "" //Şoförlük Mesaisi
	case "Avans":
		return "" //Avans
	case "Icra":
		return "" //icra
	case "Sendika":
		return "" //Sendika
	case "HediyeKart2":
		return "" //Hediye Kart
	case "YemekAyni":
		return "" //Yemek (Ayni)
	case "RamazanKumanyasiAyni":
		return "" //Ramazan Kumanyası (Ayni)
	case "BagimliOSSKesintisi":
		return "" //Bağımlı (Eş-Çocuk) ÖSS Kesintisi
	case "CalismaIzniHarciAyni":
		return "" //Çalışma İzni Harç. Vb.(Ayni)
	case "TrafikCezasiKesintisi":
		return "" //Trafik Cezası Kesintisi
	case "BesKesintisi":
		return ""
	case "YakitKart2":
		return ""
	case "GrupBesPersonelPayiKesintisi":
		return ""
	case "IstisnadanKaynaklananKesinti":
		return ""
	case "EmekliSandigiCalisanPrimKesintisi":
		return ""
	case "PesinYillikIzinKesintisi":
		return ""
	case "TelefonLimitAsimKesintisi":
		return ""
	case "ZimmetTamirKesintisi":
		return ""
	case "YakitAsimKesintisi":
		return ""
	case "DigerAvanslar":
		return ""
	case "DigerKesintiler":
		return ""
	case "ZorunluBesKesintisi":
		return ""
	case "ZimmetliBilgisayarTamirUcreti":
		return ""
	case "HarcTutarlari2":
		return ""
	case "PrimAvansi":
		return ""
	case "MasrafKesintisi":
		return ""
	case "BireyselEmekPrimi":
		return "#bireyselEmeklilikIstisna"
	case "OzelsigortaPrimi":
		return "#ozelSigortaIstisna"
	case "DigerIstisnalar":
		return "#digerIstisna"
	default:
		return ""
	}
}

// func (b *Bordro) FillBordroForm(rodForm *rod.Page) error {
// 	objValue := reflect.ValueOf(b).Elem()
// 	objType := objValue.Type()
// 	for i := 0; i < objValue.NumField(); i++ {
// 		field := objValue.Field(i)
// 		fieldName := objType.Field(i).Name
// 		valueField := field.FieldByName("Value")
// 		idField := field.FieldByName("Id")
// 		idValue := idField.Interface().(string)
// 		if idValue != "" {
// 			elem, err := rodForm.Element(idField.Interface().(string))
// 			if err != nil {
// 				return err
// 			}
// 			value := valueField.Interface().(string)
// 			// switch expression {
// 			// case "input":
// 			// 	//elem.Input(value)

// 			// }
// 			elem.Input(value)
// 		}

// 		fmt.Print(fieldName)
// 	}
// 	return nil
// }

// BordroProperty structının tipi de olabilir drop checkbox vs ayrı bir fonksiyon çalışabilir getPageId den dönebilirsin
func NewFromExcelLine(rows []string) (*Bordro, error) {
	bordro := Bordro{} // Yeni bir Bordro örneği oluştur
	//her indexi eşitleyebilirsin bordro objesine veya tek
	// Iterate over the fields of MyStruct
	objValue := reflect.ValueOf(&bordro).Elem()
	objType := objValue.Type()
	for i := 0; i < objValue.NumField(); i++ {
		field := objValue.Field(i)
		fieldName := objType.Field(i).Name
		indexField := field.FieldByName("Index")
		valueField := field.FieldByName("Value")
		idField := field.FieldByName("Id")

		if len(rows) > i {
			indexField.SetInt(int64(i))
			valueField.SetString(rows[i])
			idField.SetString(getPageId(fieldName))
		} else {
			indexField.SetInt(int64(i))
			valueField.SetString("")
			idField.SetString(getPageId(fieldName))
		}

		fmt.Print(field)
		fmt.Print(fieldName)
	}
	fmt.Print(objType)
	//bordro.Sube = ExcelCellValue{ExcelIndex: 0}

	return &bordro, nil

}
