"""Run: python -m pytest -q ; these tests never call social platform APIs."""
import os
import re
import secrets
import tempfile
from pathlib import Path

from cryptography.fernet import Fernet

os.environ['SECRET_KEY'] = secrets.token_urlsafe(48)
os.environ['FERNET_KEY'] = Fernet.generate_key().decode()
os.environ['ADMIN_PASSWORD'] = 'TestOnlyChangeMe12345'
os.environ['DATA_DIR'] = tempfile.mkdtemp(prefix='tedalal_test_')
os.environ['ALLOWED_HOSTS'] = 'testserver,localhost,127.0.0.1'

import app
from fastapi.testclient import TestClient


def test_login_upload_schedule(monkeypatch):
    client = TestClient(app.app, base_url='http://testserver')
    resp=client.get('/login')
    assert resp.status_code==200
    token = re.search(r'name="token" type="hidden" value="([^"]+)',resp.text).group(1)
    resp=client.post('/login',data={'password':'TestOnlyChangeMe12345','token':token},follow_redirects=True)
    assert 'بوست جديد' in resp.text
    token=re.search(r'name="token" type="hidden" value="([^"]+)',resp.text).group(1)
    app.save_account('facebook','123456','Test FB','fake-token')
    posted=[]
    def graph_stub(method,path,token,params=None,files=None,timeout=30,video=False):
        posted.append((method,path,params))
        return {'id':'123456_abcdef'}
    monkeypatch.setattr(app,'graph',graph_stub)
    resp=client.post('/posts',data={'token':token,'body':'أول بوست لتدلل','account_ids':'1'},follow_redirects=True)
    assert 'أول بوست لتدلل' in resp.text
    app.process_due()
    with app.db() as c:
        job=c.execute('SELECT * FROM jobs LIMIT 1').fetchone()
    assert job['status']=='published'
    assert posted[0][1]=='123456/feed'


def test_block_invalid_csrf():
    client=TestClient(app.app,base_url='http://testserver')
    response=client.post('/login',data={'password':'invalid','token':'bad'})
    assert response.status_code==403
