package models

type ProductionNoCostProductRow struct {
	UretimSekli    string  `json:"UretimSekli"`
	UrtSiparisNo   string  `json:"nUrtSiparisNo"`
	IslemTarihi    string  `json:"dteIslemTarihi"`
	FirmaKodu      string  `json:"FirmaKodu"`
	FirmaAdi       string  `json:"FirmaAdi"`
	SonIsEmriVeren string  `json:"SonIsEmriVeren"`
	ModelAdi       string  `json:"sAdi"`
	Kodu           string  `json:"sKodu"`
	SKullaniciAdi  string  `json:"sKullaniciAdi"`
	SKullaniciGunc string  `json:"sKullaniciAdiGunc"`
	MMiktarG       float64 `json:"lMMiktar_G"`
	MModelKodu     string  `json:"sMModelKodu"`
}

type ProductionHasCostProductRow struct {
	UretimSekli             string  `json:"UretimSekli"`
	NOnMLNo                 string  `json:"nOnMLNo"`
	UrunKodu                string  `json:"UrunKodu"`
	UrunAdi                 string  `json:"UrunAdi"`
	Tarihi                  string  `json:"Tarihi"`
	DteKayitTarihi          string  `json:"dteKayitTarihi"`
	SKullaniciAdi           string  `json:"sKullaniciAdi"`
	LTutarTL                float64 `json:"lTutarTL"`
	LTutarUSD               float64 `json:"lTutarUSD"`
	LTutarEURO              float64 `json:"lTutarEURO"`
	DteGuncellemeTarihi     string  `json:"dteGuncellemeTarihi"`
	SGuncellemeKullaniciAdi string  `json:"sGuncellemeKullaniciAdi"`
	NUrtReceteID            string  `json:"nUrtReceteID"`
	SAciklama               string  `json:"sAciklama"`
	SonSiparisTarihi        string  `json:"SonSiparisTarihi"`
	MaliyetDurumu           string  `json:"MaliyetDurumu"`
}

type ProductionHasCostHistoryRow struct {
	NOnMLNo                 string  `json:"nOnMLNo"`
	UrunKodu                string  `json:"UrunKodu"`
	UrunAdi                 string  `json:"UrunAdi"`
	Tarihi                  string  `json:"Tarihi"`
	SKullaniciAdi           string  `json:"sKullaniciAdi"`
	LTutarUSD               float64 `json:"lTutarUSD"`
	LTutarTL                float64 `json:"lTutarTL"`
	LTutarEURO              float64 `json:"lTutarEURO"`
	LTutarGBP               float64 `json:"lTutarGBP"`
	SDovizCinsi             string  `json:"sDovizCinsi"`
	LTutarDoviz             float64 `json:"lTutarDoviz"`
	DteGuncellemeTarihi     string  `json:"dteGuncellemeTarihi"`
	SGuncellemeKullaniciAdi string  `json:"sGuncellemeKullaniciAdi"`
	NUrtReceteID            string  `json:"nUrtReceteID"`
	SAciklama               string  `json:"sAciklama"`
}

type ProductionType struct {
	ID       string `json:"id"`
	Aciklama string `json:"aciklama"`
}

type ProductionHasCostDetailGroupItem struct {
	NOnMLNo          string   `json:"nOnMLNo"`
	NOnMLDetNo       string   `json:"nOnMLDetNo"`
	NHammaddeTuruNo  string   `json:"nHammaddeTuruNo"`
	NUrtMTBolumID    string   `json:"nUrtMTBolumID"`
	SKodu            string   `json:"sKodu"`
	SAciklama        string   `json:"sAciklama"`
	SRenk            string   `json:"sRenk"`
	SBeden           string   `json:"sBeden"`
	SAciklama2       string   `json:"sAciklama2"`
	LMiktar          float64  `json:"lMiktar"`
	LFiyat           float64  `json:"lFiyat"`
	LTutar           float64  `json:"lTutar"`
	SFiyatTipi       string   `json:"sFiyatTipi"`
	SDovizCinsi      string   `json:"sDovizCinsi"`
	LDovizKuru       float64  `json:"lDovizKuru"`
	LDovizFiyati     float64  `json:"lDovizFiyati"`
	FiyatGirilen     *float64 `json:"fiyat_girilen"`
	FiyatDoviz       string   `json:"fiyat_doviz"`
	MaliyeteDahil    bool     `json:"maliyete_dahil"`
	CMPriceTypeID    *int     `json:"cm_price_type_id"`
	USDTutar         float64  `json:"usdTutar"`
	EURTutar         float64  `json:"eurTutar"`
	GBPTutar         float64  `json:"gbpTutar"`
	SBirim           string   `json:"sBirim"`
	SHammaddeTuruAdi string   `json:"sHammaddeTuruAdi"`
	SParcaAdi        string   `json:"sParcaAdi"`
}

type ProductionHasCostDetailGroup struct {
	SAciklama3    string                             `json:"sAciklama3"`
	TotalTutar    float64                            `json:"totalTutar"`
	TotalUSDTutar float64                            `json:"totalUSDTutar"`
	Items         []ProductionHasCostDetailGroupItem `json:"items"`
}

type ProductionHasCostDetailHeader struct {
	UretimiYapanFirma       string  `json:"UretimiYapanFirma"`
	SonIsEmriVeren          string  `json:"SonIsEmriVeren"`
	NOnMLNo                 string  `json:"nOnMLNo"`
	UrunKodu                string  `json:"UrunKodu"`
	UrunAdi                 string  `json:"UrunAdi"`
	UrunIlkGrubu            string  `json:"UrunIlkGrubu"`
	UrunAnaGrubu            string  `json:"UrunAnaGrubu"`
	UrunAltGrubu            string  `json:"UrunAltGrubu"`
	UretimSekliID           string  `json:"UretimSekliID"`
	UretimSekli             string  `json:"UretimSekli"`
	FirmaKodu               string  `json:"FirmaKodu"`
	NFirmaID                int     `json:"nFirmaID"`
	MaliyetTarihi           string  `json:"maliyetTarihi"`
	DteKayitTarihi          string  `json:"dteKayitTarihi"`
	SKullaniciAdi           string  `json:"sKullaniciAdi"`
	LTutarTL                float64 `json:"lTutarTL"`
	LTutarUSD               float64 `json:"lTutarUSD"`
	LTutarEURO              float64 `json:"lTutarEURO"`
	LTutarGBP               float64 `json:"lTutarGBP"`
	SDovizCinsi             string  `json:"sDovizCinsi"`
	LTutarDoviz             float64 `json:"lTutarDoviz"`
	DteGuncellemeTarihi     string  `json:"dteGuncellemeTarihi"`
	SGuncellemeKullaniciAdi string  `json:"sGuncellemeKullaniciAdi"`
	NUrtReceteID            string  `json:"nUrtReceteID"`
}

// ============================================================
// Save (INSERT/UPDATE/DELETE/UPSERT) spUrtOnMLMas + spUrtOnMLMasDet
// ============================================================

type ProductionProductCostingOnMLSaveHeader struct {
	NOnMLNo       int    `json:"n_onml_no"`
	UrunKodu      string `json:"urun_kodu"`
	UrunAdi       string `json:"urun_adi"`
	MaliyetTarihi string `json:"maliyet_tarihi"` // YYYY-MM-DD
	NUrtReceteID  int    `json:"n_urt_recete_id"`
	UretimSekliID int    `json:"uretim_sekli_id"`
	SAciklama     string `json:"s_aciklama"`
	FirmaKodu     string `json:"firma_kodu"`
	NFirmaID      int    `json:"n_firma_id"`
}

type ProductionProductCostingOnMLSaveDetailUpsertRow struct {
	NOnMLDetNo      int     `json:"n_onml_det_no"`
	NHammaddeTuruNo int     `json:"n_hammadde_turu_no"`
	NUrtMTBolumID   int     `json:"n_urt_mt_bolum_id"`
	SKodu           string  `json:"s_kodu"`
	SAciklama       string  `json:"s_aciklama"`
	SRenk           string  `json:"s_renk"`
	SBeden          string  `json:"s_beden"`
	SAciklama2      string  `json:"s_aciklama2"`
	SBirim          string  `json:"s_birim"`
	LMiktar         float64 `json:"l_miktar"`
	FiyatGirilen    float64 `json:"fiyat_girilen"`
	FiyatDoviz      string  `json:"fiyat_doviz"`
	MaliyeteDahil   int     `json:"maliyete_dahil"`
	CMPriceTypeID   *int    `json:"cm_price_type_id"`
	SAciklama3      string  `json:"s_aciklama3"`
}

type ProductionProductCostingOnMLSaveDetailDeleteRow struct {
	NOnMLDetNo int `json:"n_onml_det_no"`
}

type ProductionProductCostingOnMLSaveDetail struct {
	Upserts []ProductionProductCostingOnMLSaveDetailUpsertRow `json:"upserts"`
	Deletes []ProductionProductCostingOnMLSaveDetailDeleteRow `json:"deletes"`
}

type ProductionProductCostingOnMLSaveRequest struct {
	DetailSource string                                 `json:"detail_source"`
	Header       ProductionProductCostingOnMLSaveHeader `json:"header"`
	Detail       ProductionProductCostingOnMLSaveDetail `json:"detail"`
}

type ProductionProductCostingOnMLSaveResponse struct {
	NOnMLNo  int      `json:"n_onml_no"`
	Warnings []string `json:"warnings,omitempty"`
}

type ProductionProductCostingTbStokExistsBulkRequest struct {
	Codes []string `json:"codes"`
}

type ProductionProductCostingTbStokExistsBulkResponse struct {
	Missing []string `json:"missing"`
	Error   string   `json:"error,omitempty"`
}

type ProductionProductCostingOnMLDeleteRequest struct {
	NOnMLNo int `json:"n_onml_no"`
}

// ============================================================
// Default quantities (URETIM): mk_MaliyetParcaEslestirme_vmiktarlar
// ============================================================

type ProductionProductCostingDefaultQtyRow struct {
	NHammaddeTuruNo int     `json:"nHammaddeTuruNo"`
	SAciklama       string  `json:"sAciklama"`
	LDefaultMiktar  float64 `json:"lDefaultMiktar"`
	DteCalcTarihi   string  `json:"dteCalcTarihi"`
	BAktif          bool    `json:"bAktif"`
}

type ProductionProductCostingDefaultQtyUpdateRequest struct {
	NHammaddeTuruNo int     `json:"nHammaddeTuruNo"`
	LDefaultMiktar  float64 `json:"lDefaultMiktar"`
	BAktif          *bool   `json:"bAktif"`
}

type ProductionProductCostingDefaultQtyBulkUpdateRequest struct {
	Items []ProductionProductCostingDefaultQtyUpdateRequest `json:"items"`
}

type ProductionProductCostingDefaultQtyCalcRequest struct {
	NHammaddeTuruNo int `json:"nHammaddeTuruNo"`
	TopN            int `json:"topN"`
}

type ProductionProductCostingDefaultQtyCalcResponse struct {
	NHammaddeTuruNo int     `json:"nHammaddeTuruNo"`
	LDefaultMiktar  float64 `json:"lDefaultMiktar"`
	NSampleCount    int     `json:"nSampleCount"`
}

type ProductionProductCostingDefaultQtyLookupRequest struct {
	NHammaddeTuruNos []int `json:"nHammaddeTuruNos"`
}

type ProductionProductCostingDefaultQtyLookupItem struct {
	NHammaddeTuruNo int     `json:"nHammaddeTuruNo"`
	SAciklama       string  `json:"sAciklama"`
	LDefaultMiktar  float64 `json:"lDefaultMiktar"`
}

type ProductionProductCostingLastOnMLDetLookupRequest struct {
	NHammaddeTuruNos []int  `json:"nHammaddeTuruNos"`
	BeforeDate       string `json:"before_date"`     // YYYY-MM-DD (optional)
	ExcludeOnMLNo    int    `json:"exclude_onml_no"` // optional
	NFirmaID         int    `json:"n_firma_id"`      // optional
	OnlyICode        bool   `json:"only_i_code"`     // optional: restrict to sKodu like 'I.%'
}

type ProductionProductCostingLastOnMLDetLookupItem struct {
	NHammaddeTuruNo int     `json:"nHammaddeTuruNo"`
	SKodu           string  `json:"sKodu"`
	SAciklama       string  `json:"sAciklama"`
	SBirim          string  `json:"sBirim"`
	FiyatDoviz      string  `json:"fiyat_doviz"`
	FiyatGirilen    float64 `json:"fiyat_girilen"`
	IsSameFirma     bool    `json:"is_same_firma"`
}

type ProductionProductCostingHammaddeByNosRequest struct {
	NHammaddeTuruNos []int `json:"nHammaddeTuruNos"`
}

type ProductionProductCostingHammaddeByNosItem struct {
	NHammaddeTuruNo int    `json:"nHammaddeTuruNo"`
	SAciklama       string `json:"sAciklama"`
	MTUrtMTBolumID  int    `json:"mtUrtMTBolumID"`
	SParcaAdi       string `json:"sParcaAdi"`
}

type ProductionHasCostDetailExchangeRates struct {
	RateDate string  `json:"rateDate"`
	TRYRate  float64 `json:"tryRate"`
	USDRate  float64 `json:"usdRate"`
	EURRate  float64 `json:"eurRate"`
	GBPRate  float64 `json:"gbpRate"`
}

type ProductionHasCostDetailEditorOption struct {
	Kind             string `json:"kind"`
	Value            string `json:"value"`
	Label            string `json:"label"`
	NStokID          string `json:"nStokID"`
	NHammaddeTuruNo  string `json:"nHammaddeTuruNo"`
	SHammaddeTuruAdi string `json:"sHammaddeTuruAdi"`
	SAciklama3       string `json:"sAciklama3"`
	MTUrtMTBolumID   int    `json:"mtUrtMTBolumID"`
	SKodu            string `json:"sKodu"`
	SAciklama        string `json:"sAciklama"`
	SModel           string `json:"sModel"`
	SBirim           string `json:"sBirim"`
	ColorCode        string `json:"colorCode"`
	ColorDescription string `json:"colorDescription"`
	SParcaAdi        string `json:"sParcaAdi"`
}

type ProductionHasCostDetailPriceLookupItem struct {
	RowKey              string  `json:"__rowKey"`
	NOnMLNo             string  `json:"n_onml_no"`
	NOnMLDetNo          string  `json:"n_onml_det_no"`
	NHammaddeTuruNo     string  `json:"n_hammadde_turu_no"`
	SKodu               string  `json:"s_kodu"`
	SAciklama           string  `json:"s_aciklama"`
	SRenk               string  `json:"s_renk"`
	ColorCode           string  `json:"color_code"`
	ColorDescription    string  `json:"color_description"`
	ItemDim1Code        string  `json:"item_dim1_code"`
	ItemDim1Description string  `json:"item_dim1_description"`
	SBirim              string  `json:"s_birim"`
	LMiktar             float64 `json:"l_miktar"`
	FiyatGirilen        float64 `json:"fiyat_girilen"`
	FiyatDoviz          string  `json:"fiyat_doviz"`
	MaliyeteDahil       int     `json:"maliyete_dahil"`
	CMPriceTypeID       *int    `json:"cm_price_type_id"`
}

type ProductionHasCostDetailBulkPriceRequest struct {
	NOnMLNo       string                                   `json:"n_onml_no"`
	UrunKodu      string                                   `json:"urun_kodu"`
	NUrtReceteID  string                                   `json:"n_urt_recete_id"`
	MaliyetTarihi string                                   `json:"maliyet_tarihi"`
	Items         []ProductionHasCostDetailPriceLookupItem `json:"items"`
}

type ProductionHasCostDetailBulkPriceRow struct {
	RowKey              string  `json:"__rowKey"`
	NOnMLDetNo          string  `json:"nOnMLDetNo"`
	NHammaddeTuruNo     string  `json:"nHammaddeTuruNo"`
	SKodu               string  `json:"sKodu"`
	ColorCode           string  `json:"ColorCode"`
	ColorDescription    string  `json:"ColorDescription"`
	ItemDim1Code        string  `json:"ItemDim1Code"`
	ItemDim1Description string  `json:"ItemDim1Description"`
	FiyatGirilen        float64 `json:"fiyat_girilen"`
	FiyatDoviz          string  `json:"fiyat_doviz"`
	PriceType           string  `json:"priceType"`
	Tarih               string  `json:"Tarih"`
	FaturaKodu          string  `json:"FaturaKodu"`
	MasrafKodu          string  `json:"MasrafKodu"`
	MasrafDetay         string  `json:"MasrafDetay"`
}

type ProductionHasCostDetailPurchaseHistoryRow struct {
	SourceType          string  `json:"sourceType"`
	Tarih               string  `json:"Tarih"`
	FaturaKodu          string  `json:"FaturaKodu"`
	FirmaKodu           string  `json:"FirmaKodu"`
	FirmaAciklama       string  `json:"FirmaAciklama"`
	MasrafKodu          string  `json:"MasrafKodu"`
	MasrafDetay         string  `json:"MasrafDetay"`
	ColorCode           string  `json:"ColorCode"`
	ColorDescription    string  `json:"ColorDescription"`
	ItemDim1Code        string  `json:"ItemDim1Code"`
	ItemDim1Description string  `json:"ItemDim1Description"`
	Miktar              float64 `json:"Miktar"`
	BIRIM               string  `json:"BIRIM"`
	EvrakFiyat          float64 `json:"EvrakFiyat"`
	EvrakTutar          float64 `json:"EvrakTutar"`
	EvrakDoviz          string  `json:"EvrakDoviz"`
	PriceType           string  `json:"priceType"`
}

type ProductionHasCostDetailRecipeHistoryRow struct {
	SourceType     string  `json:"sourceType"`
	DteIslemTarihi string  `json:"dteIslemTarihi"`
	NOnMLNo        string  `json:"nOnMLNo"`
	FirmaKodu      string  `json:"FirmaKodu"`
	FirmaAciklama  string  `json:"FirmaAciklama"`
	SKodu          string  `json:"sKodu"`
	SAciklama      string  `json:"sAciklama"`
	SRenk          string  `json:"sRenk"`
	LMiktar        float64 `json:"lMiktar"`
	SBirim         string  `json:"sBirim"`
	LDovizFiyati   float64 `json:"lDovizFiyati"`
	LDovizTutari   float64 `json:"lDovizTutari"`
	USD            string  `json:"USD"`
	PriceType      string  `json:"priceType"`
	DUMMY          string  `json:"DUMMY"`
}

type ProductionHasCostDetailLineHistoryResponse struct {
	PurchaseRows []ProductionHasCostDetailPurchaseHistoryRow `json:"purchaseRows"`
	RecipeRows   []ProductionHasCostDetailRecipeHistoryRow   `json:"recipeRows"`
}

type ProductionProductCostingMTBolumMappingRow struct {
	ID            int    `json:"id"`
	UrunAnaGrubu  string `json:"urunAnaGrubu"`
	UrunAltGrubu  string `json:"urunAltGrubu"`
	NUrtMTBolumID int    `json:"nUrtMTBolumID"`
	MTBolumAdi    string `json:"mtBolumAdi"`
	BAktif        bool   `json:"bAktif"`
	DteIslem      string `json:"dteIslemTarihi"`
	SKullaniciAdi string `json:"sKullaniciAdi"`
}

type ProductionProductCostingMTBolumMappingUpsertRequest struct {
	UrunAnaGrubu  string `json:"urunAnaGrubu"`
	UrunAltGrubu  string `json:"urunAltGrubu"`
	NUrtMTBolumID int    `json:"nUrtMTBolumID"`
	BAktif        bool   `json:"bAktif"`
}

// NEW: Maliyet Parca Eslestirme (Ana/Alt Grup + MTBolum + cok secmeli HammaddeTurleri)
type ProductionProductCostingParcaMappingRow struct {
	ID               int      `json:"id"`
	UrunIlkGrubu     string   `json:"urunIlkGrubu"`
	UrunAnaGrubu     string   `json:"urunAnaGrubu"`
	UrunAltGrubu     string   `json:"urunAltGrubu"`
	NUrtMTBolumID    int      `json:"nUrtMTBolumID"`
	ParcaBolumAdi    string   `json:"parcaBolumAdi"`
	NHammaddeTurleri []string `json:"nHammaddeTurleri"`
	BAktif           bool     `json:"bAktif"`
	DteIslem         string   `json:"dteIslemTarihi"`
	SKullaniciAdi    string   `json:"sKullaniciAdi"`
}

type ProductionProductCostingParcaMappingUpsertRequest struct {
	UrunIlkGrubu     string `json:"urunIlkGrubu"`
	UrunAnaGrubu     string `json:"urunAnaGrubu"`
	UrunAltGrubu     string `json:"urunAltGrubu"`
	NUrtMTBolumID    int    `json:"nUrtMTBolumID"`
	NHammaddeTurleri []int  `json:"nHammaddeTurleri"`
	BAktif           bool   `json:"bAktif"`
}

type ProductionProductCostingLookupOption struct {
	Value string `json:"value"`
	Label string `json:"label"`
}

type ProductionProductCostingAnaAltComboRow struct {
	UrunIlkGrubu string `json:"urunIlkGrubu"`
	UrunAnaGrubu string `json:"urunAnaGrubu"`
	UrunAltGrubu string `json:"urunAltGrubu"`
}
