package domain

import (
	"errors"
	"time"
)

var (
	ErrUserNotFound = errors.New("user not found")
)

type User struct {
	ID          int64
	FirstName   string
	LastName    string
	Email       string `json:"email"`
	PhoneNumber string `json:"phone_number"`
	Password    []byte
	Role        Role
	//
	EmailVerified bool
	PhoneVerified bool
	//
	CreatedAt time.Time
	UpdatedAt time.Time
	//
	SuspendedAt time.Time
	Suspended   bool
	//
	CompanyID ValidInt64
}

type RegisterUserReq struct {
	FirstName    string
	LastName     string
	Email        string
	PhoneNumber  string
	Password     string
	Role         string
	Otp          string
	ReferralCode string `json:"referral_code"`
	OtpMedium    OtpMedium
}
type CreateUserReq struct {
	FirstName   string
	LastName    string
	Email       string
	PhoneNumber string
	Password    string
	Role        string
	Suspended   bool
	CompanyID   ValidInt64
}
type ResetPasswordReq struct {
	Email       string
	PhoneNumber string
	Password    string
	Otp         string
	OtpMedium   OtpMedium
}
type UpdateUserReq struct {
	UserId    int64
	FirstName ValidString
	LastName  ValidString
	Suspended ValidBool

	CompanyID ValidInt64
}

type UpdateUserReferalCode struct {
	UserID int64
	Code   string
}

type GetCashier struct {
	ID             int64     `json:"id"`
	FirstName      string    `json:"first_name"`
	LastName       string    `json:"last_name"`
	Email          string    `json:"email"`
	PhoneNumber    string    `json:"phone_number"`
	Role           Role      `json:"role"`
	EmailVerified  bool      `json:"email_verified"`
	PhoneVerified  bool      `json:"phone_verified"`
	CreatedAt      time.Time `json:"created_at"`
	UpdatedAt      time.Time `json:"updated_at"`
	SuspendedAt    time.Time `json:"suspended_at"`
	Suspended      bool      `json:"suspended"`
	BranchID       int64     `json:"branch_id"`
	BranchName     string    `json:"branch_name"`
	BranchWallet   int64     `json:"branch_wallet"`
	BranchLocation string    `json:"branch_location"`
}
