import time

from website import create_app
from flask_script import Manager, Shell
from flask_migrate import MigrateCommand
from werkzeug.security import gen_salt
import os

app = create_app(os.getenv('FLASK_ENV') or 'config.DevelopementConfig')

manager = Manager(app)

manager.add_command('db', MigrateCommand)


@manager.command
def init_db():
    from website.models import db
    db.create_all()
    print("database init")


@manager.command
def test_data():
    from website.models import db, User, OAuth2Client
    print("add test data")
    admin = User()
    admin.name = "Admin"
    admin.username = "admin"
    admin.email = "test@example.com"
    admin.set_password("admin")
    db.session.add(admin)
    db.session.commit()
    print('added user: {}'.format(admin))

    client_id = gen_salt(24)
    client_id_issued_at = int(time.time())
    client = OAuth2Client(
        client_id=client_id,
        client_id_issued_at=client_id_issued_at,
        user_id=admin.get_id(),
    )
    client_metadata = {
        "client_name": "Test client",
        "client_uri": "https://social.yandex.net",
        "grant_types": ['authorization_code', 'refresh_token'],
        "redirect_uris": "https://social.yandex.net/broker/redirect",
        "response_types": ['code', 'token'],
        "scope": 'profile',
        "token_endpoint_auth_method": 'client_secret_post'
    }
    client.set_client_metadata(client_metadata)
    client.client_secret = gen_salt(48)
    db.session.add(client)
    db.session.commit()
    print('added client: id:{}, secret:{}'.format(client_id, client.client_secret))
    print('test url: http://127.0.0.1:5000/oauth/authorize?scope=profile&response_type=code&client_id={}'.format(client_id))



if __name__ == '__main__':
    manager.run()

# http://127.0.0.1:5000/oauth/authorize?scope=profile&response_type=code&client_id=rrC8VDll9RRbBjNLhY4T9jDO

# > curl -XPOST "http://127.0.0.1:5000/oauth/token" -F client_id=rrC8VDll9RRbBjNLhY4T9jDO -F client_secret=CxKyWG8Z972hkLQq7hMblH7BsP4JWtQn7qahqzW15h5ZUUJI -F grant_type=authorization_code -F code=wur5zaxmDfxK9Qsvvebqz1N0XKa7zewSrNYJJAYHlZGfsOJa
# < {"access_token": "LBdvuoKeiY9tHJKMoLdvrG8Zfqs4FbPOz1ze0Ahv96", "expires_in": 864000, "scope": "profile", "token_type": "Bearer"}

# > curl -H "Authorization: Bearer LBdvuoKeiY9tHJKMoLdvrG8Zfqs4FbPOz1ze0Ahv96" "http://127.0.0.1:5000/api/me"
# {
#   "id": 1,
#   "username": "admin"
# }