-- ============================================================================
-- Migration: Aktivite Takip Sistemi
-- Tarih: 2026-02-15
-- Açıklama: Bayi ürün görüntüleme logu ve aktif kullanıcı takibi
-- ============================================================================

-- Tablo 1: Ürün Görüntüleme/Arama Logu
-- ============================================================================
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'MS_B2B_PRODUCT_VIEWS') AND type = 'U')
    DROP TABLE MS_B2B_PRODUCT_VIEWS;
GO

CREATE TABLE MS_B2B_PRODUCT_VIEWS (
    LOGICALREF INT IDENTITY(1,1) PRIMARY KEY,
    MEMBERREF INT NOT NULL,              -- MS_B2B_MEMBERS.LOGICALREF (Bayi)
    STOCKREF INT NULL,                   -- LG_xxx_ITEMS.LOGICALREF (Ürün, opsiyonel)
    ITEMCODE NVARCHAR(100) NULL,         -- Ürün kodu
    ITEMNAME NVARCHAR(250) NULL,         -- Ürün adı
    SEARCHQUERY NVARCHAR(250) NULL,      -- Arama terimi
    RESULT_COUNT INT DEFAULT 0,          -- Sonuç sayısı
    IPADDRESS NVARCHAR(50) NULL,         -- Kullanıcı IP adresi
    VIEWDATE DATETIME DEFAULT GETDATE(), -- Görüntüleme zamanı
    PAGE_URL NVARCHAR(500) NULL          -- Sayfa URL'i
);
GO

-- İndeksler
CREATE INDEX IX_PRODUCT_VIEWS_MEMBER ON MS_B2B_PRODUCT_VIEWS(MEMBERREF);
CREATE INDEX IX_PRODUCT_VIEWS_DATE ON MS_B2B_PRODUCT_VIEWS(VIEWDATE DESC);
CREATE INDEX IX_PRODUCT_VIEWS_STOCK ON MS_B2B_PRODUCT_VIEWS(STOCKREF) WHERE STOCKREF IS NOT NULL;
CREATE INDEX IX_PRODUCT_VIEWS_SEARCH ON MS_B2B_PRODUCT_VIEWS(SEARCHQUERY) WHERE SEARCHQUERY IS NOT NULL;
GO

PRINT 'MS_B2B_PRODUCT_VIEWS tablosu oluşturuldu.';
GO


-- Tablo 2: Aktif Oturumlar
-- ============================================================================
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'MS_B2B_ACTIVE_SESSIONS') AND type = 'U')
    DROP TABLE MS_B2B_ACTIVE_SESSIONS;
GO

CREATE TABLE MS_B2B_ACTIVE_SESSIONS (
    LOGICALREF INT IDENTITY(1,1) PRIMARY KEY,
    MEMBERREF INT NOT NULL,                  -- MS_B2B_MEMBERS.LOGICALREF veya admin ref
    USERTYPE TINYINT DEFAULT 1,              -- 0=Admin, 1=Bayi
    USERNAME NVARCHAR(100) NULL,             -- Kullanıcı adı (PERSONNAME)
    COMPANYNAME NVARCHAR(250) NULL,          -- Firma adı (bayi ise)
    SESSION_ID NVARCHAR(128) NOT NULL,       -- PHP session ID
    IPADDRESS NVARCHAR(50) NULL,             -- IP adresi
    USER_AGENT NVARCHAR(500) NULL,           -- Browser bilgisi
    LAST_ACTIVITY DATETIME DEFAULT GETDATE(), -- Son aktivite zamanı
    LOGIN_TIME DATETIME DEFAULT GETDATE(),   -- Giriş zamanı
    CURRENT_PAGE NVARCHAR(250) NULL,         -- Son görüntülenen sayfa
    IS_ACTIVE BIT DEFAULT 1                  -- Aktif mi?
);
GO

-- İndeksler
CREATE INDEX IX_ACTIVE_SESSIONS_ACTIVITY ON MS_B2B_ACTIVE_SESSIONS(LAST_ACTIVITY DESC);
CREATE INDEX IX_ACTIVE_SESSIONS_MEMBER ON MS_B2B_ACTIVE_SESSIONS(MEMBERREF);
CREATE UNIQUE INDEX IX_ACTIVE_SESSIONS_SID ON MS_B2B_ACTIVE_SESSIONS(SESSION_ID);
CREATE INDEX IX_ACTIVE_SESSIONS_ACTIVE ON MS_B2B_ACTIVE_SESSIONS(IS_ACTIVE, LAST_ACTIVITY) WHERE IS_ACTIVE = 1;
GO

PRINT 'MS_B2B_ACTIVE_SESSIONS tablosu oluşturuldu.';
GO


-- Cleanup: Eski oturumları temizleme (30 günden eski)
-- ============================================================================
-- Bu script'i otomatik olarak çalıştırmak için SQL Server Agent Job oluşturabilirsiniz
-- veya PHP'den periyodik olarak çalıştırabilirsiniz

-- ÖRNEK: DELETE FROM MS_B2B_ACTIVE_SESSIONS WHERE LAST_ACTIVITY < DATEADD(DAY, -30, GETDATE());


-- Test Verileri (Opsiyonel - Geliştirme ortamı için)
-- ============================================================================
/*
-- Test arama logu
INSERT INTO MS_B2B_PRODUCT_VIEWS (MEMBERREF, SEARCHQUERY, RESULT_COUNT, IPADDRESS)
VALUES (1, 'Bridgestone', 15, '192.168.1.100');

INSERT INTO MS_B2B_PRODUCT_VIEWS (MEMBERREF, SEARCHQUERY, RESULT_COUNT, IPADDRESS)
VALUES (2, '38565225', 8, '10.0.0.50');

-- Test aktif oturum
INSERT INTO MS_B2B_ACTIVE_SESSIONS (MEMBERREF, USERTYPE, USERNAME, COMPANYNAME, SESSION_ID, IPADDRESS, CURRENT_PAGE)
VALUES (1, 1, 'Ali Yılmaz', 'ABC Lastik', 'test_session_123', '192.168.1.100', 'dealer-items.php');

PRINT 'Test verileri eklendi.';
*/

PRINT '';
PRINT '============================================================================';
PRINT 'Migration tamamlandı!';
PRINT 'Oluşturulan tablolar:';
PRINT '  - MS_B2B_PRODUCT_VIEWS (Ürün görüntüleme logu)';
PRINT '  - MS_B2B_ACTIVE_SESSIONS (Aktif oturum takibi)';
PRINT '============================================================================';
GO
