package persistence

import (
	"context"
	"database/sql"
	"time"

	"github.com/google/uuid"
	"github.com/nexuscrm/kernel/pkg/query"
	"github.com/nexuscrm/shared/pkg/constants"
)

// LoginHistoryRepository handles database operations for login history.
type LoginHistoryRepository struct {
	db *sql.DB
}

// NewLoginHistoryRepository creates a new LoginHistoryRepository.
func NewLoginHistoryRepository(db *sql.DB) *LoginHistoryRepository {
	return &LoginHistoryRepository{db: db}
}

// RecordLogin inserts a login history entry into the database.
func (r *LoginHistoryRepository) RecordLogin(ctx context.Context, userID, loginType, sourceIP, browser, status string) error {
	now := time.Now()
	values := map[string]any{
		constants.FieldSysLoginHistory_ID:          uuid.New().String(),
		constants.FieldSysLoginHistory_UserID:      userID,
		constants.FieldSysLoginHistory_LoginTime:   now,
		constants.FieldSysLoginHistory_LoginType:   loginType,
		constants.FieldSysLoginHistory_SourceIP:    sourceIP,
		constants.FieldSysLoginHistory_Browser:     browser,
		constants.FieldSysLoginHistory_Status:      status,
		constants.FieldSysLoginHistory_CreatedDate: now,
	}

	qr := query.Insert(constants.TableLoginHistory, values).Build()
	_, err := r.db.ExecContext(ctx, qr.SQL, qr.Params...)
	return err
}
