package models

import "time"

// Lot represents existing lot table
type Lot struct {
	LotName        string  `gorm:"column:lot_name;primaryKey;size:255" json:"lot_name"`
	LotDescription string  `gorm:"column:lot_description;size:10000" json:"lot_description"`
	LotCategory    *string `gorm:"column:lot_category;size:50" json:"lot_category"`
}

func (Lot) TableName() string {
	return "lot"
}

// LotLog represents existing lot_log table (READ-ONLY)
type LotLog struct {
	LotLogID uint      `gorm:"column:lot_log_id;primaryKey;autoIncrement"`
	Lot      string    `gorm:"column:lot;size:255;not null"`
	Supplier string    `gorm:"column:supplier;size:255;not null"`
	Date     time.Time `gorm:"column:date;type:date;not null"`
	Price    float64   `gorm:"column:price;not null"`
	Quality  string    `gorm:"column:quality;size:255"`
	Comments string    `gorm:"column:comments;size:15000"`
}

func (LotLog) TableName() string {
	return "lot_log"
}

// Supplier represents existing supplier table (READ-ONLY)
type Supplier struct {
	SupplierName    string `gorm:"column:supplier_name;primaryKey;size:255"`
	SupplierComment string `gorm:"column:supplier_comment;size:10000"`
}

func (Supplier) TableName() string {
	return "supplier"
}

// StockLog stores warehouse stock snapshots imported from external files.
type StockLog struct {
	StockLogID uint      `gorm:"column:stock_log_id;primaryKey;autoIncrement"`
	Partnumber string    `gorm:"column:partnumber;size:255;not null"`
	Supplier   *string   `gorm:"column:supplier;size:255"`
	Date       time.Time `gorm:"column:date;type:date;not null"`
	Price      float64   `gorm:"column:price;not null"`
	Quality    *string   `gorm:"column:quality;size:255"`
	Comments   *string   `gorm:"column:comments;size:15000"`
	Vendor     *string   `gorm:"column:vendor;size:255"`
	Qty        *float64  `gorm:"column:qty"`
}

func (StockLog) TableName() string {
	return "stock_log"
}

// LotPartnumber maps external part numbers to internal lots.
type LotPartnumber struct {
	Partnumber  string  `gorm:"column:partnumber;size:255;primaryKey" json:"partnumber"`
	LotName     string  `gorm:"column:lot_name;size:255;primaryKey" json:"lot_name"`
	Description *string `gorm:"column:description;size:10000" json:"description,omitempty"`
}

func (LotPartnumber) TableName() string {
	return "lot_partnumbers"
}

// StockIgnoreRule contains import ignore pattern rules.
type StockIgnoreRule struct {
	ID        uint      `gorm:"column:id;primaryKey;autoIncrement" json:"id"`
	Target    string    `gorm:"column:target;size:20;not null" json:"target"`         // partnumber|description
	MatchType string    `gorm:"column:match_type;size:20;not null" json:"match_type"` // exact|prefix|suffix
	Pattern   string    `gorm:"column:pattern;size:500;not null" json:"pattern"`
	CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"created_at"`
}

func (StockIgnoreRule) TableName() string {
	return "stock_ignore_rules"
}
