package health_insurance_companies

import (
	"time"

	"gorm.io/gorm"

	"wucher/internal/shared/pkg/uuidv7"
)

type HealthInsuranceCompany struct {
	ID           []byte     `gorm:"type:binary(16);primaryKey;column:id"`
	Name         string     `gorm:"type:varchar(128);not null;column:name"`
	SortKey      *int       `gorm:"column:sortkey"`
	LandID       []byte     `gorm:"type:binary(16);index;column:land_id"`
	State        string     `gorm:"type:varchar(128);column:state"`
	Address      string     `gorm:"type:varchar(256);column:address"`
	MobileNumber string     `gorm:"type:varchar(20);column:mobile_number"`
	Email        string     `gorm:"type:varchar(128);column:email"`
	Note         string     `gorm:"type:text;column:note"`
	IsActive     bool       `gorm:"type:tinyint(1);index;not null;default:1;column:is_active"`
	CreatedAt    time.Time  `gorm:"column:created_at"`
	CreatedBy    []byte     `gorm:"type:binary(16);column:created_by"`
	UpdatedAt    time.Time  `gorm:"column:updated_at"`
	UpdatedBy    []byte     `gorm:"type:binary(16);column:updated_by"`
	DeletedAt    *time.Time `gorm:"column:deleted_at"`
	DeletedBy    []byte     `gorm:"type:binary(16);column:deleted_by"`
}

func (HealthInsuranceCompany) TableName() string { return "health_insurance_companies" }

type StateDetail struct {
	LandID         string
	FederalStateID string
	FederalState   string
	LandName       string
	LandISOCode    string
}

// LandDetail is used to enrich health insurance company responses from land_id.
type LandDetail struct {
	LandID      string
	LandName    string
	LandISOCode string
}

func (h *HealthInsuranceCompany) BeforeCreate(tx *gorm.DB) error {
	if len(h.ID) == 0 {
		h.ID = uuidv7.MustBytes()
	}
	return nil
}
