# -*- coding: utf-8 -*-
"""Cria dbo.taxa: os multiplicadores de evento do servidor, editaveis a quente.

O oficial roda eventos que multiplicam varias coisas ao mesmo tempo, e isso NAO aparece
em campo nenhum do protocolo -- so no valor que chega. Foi o que quase estragou a medicao
da Maga em 24/08: o servidor estava com EXP 3x e todo ganho veio triplicado (aranha de 24
dando 72). Sem o jogador avisar, a EXP de cada mob teria entrado no banco tres vezes maior.

Por isso as taxas ficam numa tabela, e nao espalhadas no codigo:

    exp          EXP por abate                          1.0 = 100%, 3.0 = evento 3x
    fleta        pontos de Fleta quando a barra enche    1.0 = 1 ponto, 5.0 = 5 pontos
    drop_chance  probabilidade de um item cair
    drop_qtd     quantos itens caem de uma vez
    alz          dinheiro por abate
    encante      chance de sucesso ao encantar
    skill_exp    EXP de skill, quando existir

Nem todas ligadas ainda: drop, alz e encante nao tem sistema por tras. Ficam na tabela
desde ja pra que, quando tiverem, o lugar de configurar seja um so.
"""
import sys

import pyodbc

CONEXAO = ("DRIVER={ODBC Driver 18 for SQL Server};SERVER=localhost;"
           "DATABASE=Rosh;Trusted_Connection=yes;TrustServerCertificate=yes")

TABELA = """
IF OBJECT_ID('dbo.taxa') IS NOT NULL DROP TABLE dbo.taxa;
CREATE TABLE dbo.taxa (
    codigo        VARCHAR(24)   NOT NULL PRIMARY KEY,
    descricao     NVARCHAR(120) NULL,
    multiplicador DECIMAL(8,3)  NOT NULL,
    implementado  BIT           NOT NULL,
    alterada_em   DATETIME2     NOT NULL DEFAULT SYSUTCDATETIME()
);
"""

LINHAS = [
    ("exp",         "EXP por abate. 3.0 = o evento 3x que o oficial rodava em 24/08", 1.0, 1),
    ("fleta",       "Pontos de Fleta quando a barra enche. 1.0 = 1 ponto por barra", 1.0, 0),
    ("drop_chance", "Chance de o mob largar item", 1.0, 0),
    ("drop_qtd",    "Quantidade de itens por drop", 1.0, 0),
    ("alz",         "Dinheiro por abate", 1.0, 0),
    ("encante",     "Chance de sucesso ao encantar/refinar", 1.0, 0),
    ("skill_exp",   "EXP de skill", 1.0, 0),
    ("reputacao",   "Reputacao por abate. O evento de EXP NAO multiplica esta: "
                    "medida em +8 com e sem evento", 1.0, 1),
]


def main() -> int:
    con = pyodbc.connect(CONEXAO, autocommit=False)
    cur = con.cursor()
    for parte in TABELA.split(";"):
        if parte.strip():
            cur.execute(parte)
    cur.executemany("INSERT INTO dbo.taxa (codigo, descricao, multiplicador, implementado) "
                    "VALUES (?,?,?,?)", LINHAS)
    con.commit()
    cur.execute("SELECT codigo, multiplicador, implementado, descricao FROM dbo.taxa "
                "ORDER BY implementado DESC, codigo")
    print("dbo.taxa criada:\n")
    print("%-14s %-8s %-14s %s" % ("codigo", "valor", "implementado", "o que faz"))
    print("-" * 96)
    for c, m, i, d in cur.fetchall():
        print("%-14s %-8s %-14s %s" % (c, "%.2fx" % m, "sim" if i else "ainda nao", (d or "")[:52]))
    con.close()
    print()
    print("pra ligar um evento:")
    print("   UPDATE dbo.taxa SET multiplicador = 3 WHERE codigo = 'exp'")
    print("   (o servidor le a cada uso, nao precisa reiniciar)")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
