package models

import (
	"time"

	"gorm.io/gorm"
)

type DoormileClient struct {
	ID        uint64         `gorm:"primaryKey;autoIncrement" json:"id"`
	CreatedAt time.Time      `json:"created_at"`
	UpdatedAt time.Time      `json:"updated_at"`
	DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`

	// Core identity
	FirstName string `gorm:"size:100;not null" json:"first_name"`
	LastName  string `gorm:"size:100" json:"last_name"`
	Phone     string `gorm:"uniqueIndex;size:20;not null" json:"phone"`

	// Location
	Address       string  `gorm:"type:text" json:"address"`
	City          string  `gorm:"size:100" json:"city"`
	State         string  `gorm:"size:100" json:"state"`
	Neighbourhood string  `gorm:"size:100" json:"neighbourhood"`
	Pincode       string  `gorm:"size:20" json:"pincode"`

	// GPS survey data
	SurveyLat     float64 `gorm:"column:surveylat" json:"survey_lat"`
	SurveyLong    float64 `gorm:"column:surveylong" json:"survey_long"`
	SurveyAddress string  `gorm:"type:text" json:"survey_address"`
	SurveyZone    string  `gorm:"size:100" json:"survey_zone"`
	SurveyPincode string  `gorm:"size:20" json:"survey_pincode"`

	// Business profile (both consent levels)
	BusinessType      string `gorm:"size:50" json:"business_type"`
	Status            string `gorm:"size:50;default:'newClient'" json:"status"`
	ShippingFrequency string `gorm:"size:50" json:"shipping_frequency"`
	LogisticsSegment  string `gorm:"size:50" json:"logistics_segment"`
	TransitFrom       string `gorm:"size:100" json:"transit_from"`
	TransitTo         string `gorm:"size:100" json:"transit_to"`

	// Full-consent-only fields (zeroed for basicOnly)
	ParcelVolume       float64 `json:"parcel_volume"`
	ActiveContracts    int    `json:"active_contracts"`
	LogisticsProvider  string `gorm:"size:100" json:"logistics_provider"`
	ProviderEfficiency string `gorm:"size:100" json:"provider_efficiency"`
	Notes              string `gorm:"type:text" json:"notes"`

	// Consent & registration tracking
	DataConsent        string `gorm:"size:20;default:'full'" json:"data_consent"`
	RegistrationSource string `gorm:"size:50" json:"registration_source"`
	RegisteredByID     uint64 `json:"registered_by_id"`
}

func (DoormileClient) TableName() string {
	return "doormile_clients"
}

type DoormileAuth struct {
	ID           uint64         `gorm:"primaryKey;autoIncrement" json:"id"`
	ClientID     *uint64        `gorm:"default:null" json:"client_id"`
	Client       DoormileClient `gorm:"foreignKey:ClientID" json:"client"`
	Email        string         `gorm:"uniqueIndex;size:255;not null" json:"email"`
	PasswordHash string         `gorm:"not null" json:"-"`
	Role         string         `gorm:"default:'user'" json:"role"`
	CreatedAt    time.Time      `json:"created_at"`
	UpdatedAt    time.Time      `json:"updated_at"`
}

func (DoormileAuth) TableName() string {
	return "doormile_auth"
}
