import sqlite3, re
DB = '/root/aff-monitor/db/monitor.sqlite'
con = sqlite3.connect(DB)
cur = con.cursor()
cols = {row[1] for row in cur.execute('PRAGMA table_info(products)')}
adds = [
    ('is_public', 'ALTER TABLE products ADD COLUMN is_public INTEGER DEFAULT 1'),
    ('is_featured', 'ALTER TABLE products ADD COLUMN is_featured INTEGER DEFAULT 0'),
    ('sort_order', 'ALTER TABLE products ADD COLUMN sort_order INTEGER DEFAULT 100'),
    ('internal_pid', 'ALTER TABLE products ADD COLUMN internal_pid TEXT'),
    ('provider_pid', 'ALTER TABLE products ADD COLUMN provider_pid TEXT'),
    ('slug', 'ALTER TABLE products ADD COLUMN slug TEXT'),
    ('aff_code', 'ALTER TABLE products ADD COLUMN aff_code TEXT'),
    ("aff_param", "ALTER TABLE products ADD COLUMN aff_param TEXT DEFAULT 'aff'"),
]
for name, sql in adds:
    if name not in cols:
        cur.execute(sql)
        print('+', name)
cur.execute("CREATE TABLE IF NOT EXISTS settings (key TEXT PRIMARY KEY, value TEXT, updated_at TEXT DEFAULT (datetime('now')))" )
print('+ settings table ensured')
cols = {row[1] for row in cur.execute('PRAGMA table_info(products)')}
if 'is_public' in cols:
    cur.execute('UPDATE products SET is_public=COALESCE(is_public,1)')
if 'is_featured' in cols:
    cur.execute('UPDATE products SET is_featured=COALESCE(is_featured,0)')
if 'sort_order' in cols:
    cur.execute('UPDATE products SET sort_order=COALESCE(sort_order,100)')
rows = cur.execute('SELECT id, name FROM products ORDER BY id').fetchall()
for pid, name in rows:
    if 'internal_pid' in cols:
        cur.execute('UPDATE products SET internal_pid=COALESCE(internal_pid, ?) WHERE id=?', (f'VPS-{pid:06d}', pid))
    if 'slug' in cols:
        base = re.sub(r'[^a-z0-9]+', '-', (name or '').lower()).strip('-') or f'product-{pid}'
        cur.execute('UPDATE products SET slug=COALESCE(slug, ?) WHERE id=?', (f'{base}-{pid}', pid))
con.commit()
print('done', DB)
