import shutil, sys, io
kok = r"D:\__sistem__\Masaustu\FikoYT.Yeni.Cag\fikatia-local"
f = kok + r"\uygulama\fikocad\lisans_canli.cpp"
yeni_ws = open(kok + r"\insa\yeni_ws.cpp.txt", encoding="utf-8", newline="").read()

raw = open(f, encoding="utf-8", newline="").read()
crlf = "\r\n" in raw
t = raw.replace("\r\n", "\n")
shutil.copyfile(f, f + ".bak_ws")

# --- 1) yardimci fonksiyonlar ---
yardimci = '''// Socket.IO 2.x websocket cerceveleri (engine.io v3): uzunluk oneki YOK.
//   olay:  42/isans,["olay",{...}]      (4=engine.io message, 2=socket.io EVENT)
std::string socketioEventUret(const std::string& event, const std::string& argsJson) {
  std::string p = "42/isans,[";
  p += TIRNAK;
  p += event;
  p += TIRNAK;
  p += ',';
  p += argsJson;
  p += ']';
  return p;
}

// "42/isans,[\\"olay\\",{...}]" (veya namespace'siz "42[...]") -> olay adi + arguman JSON'u.
bool engineioPayloadCoz(const std::string& frame, std::string& outEvent, std::string& outJson) {
  if (frame.size() < 4 || frame[0] != '4' || frame[1] != '2') return false;
  size_t i = 2;
  if (frame[i] == '/') {
    const size_t virgul = frame.find(',', i);
    if (virgul == std::string::npos) return false;
    i = virgul + 1;
  }
  if (i >= frame.size() || frame[i] != '[') return false;
  ++i;
  if (i >= frame.size() || frame[i] != TIRNAK) return false;
  const size_t adBit = frame.find(TIRNAK, i + 1);
  if (adBit == std::string::npos) return false;
  outEvent = frame.substr(i + 1, adBit - i - 1);
  const size_t virg2 = frame.find(',', adBit);
  if (virg2 == std::string::npos) {
    outJson.clear();
    return true;
  }
  const size_t son = frame.find_last_of(']');
  if (son == std::string::npos || son <= virg2) return false;
  outJson = frame.substr(virg2 + 1, son - virg2 - 1);
  return true;
}

'''
a = t.find("std::string socketioEventUret(")
b = t.find("// JSON say", a)
assert a > 0 and b > a, ("yardimci sinirlari bulunamadi", a, b)
t = t[:a] + yardimci + t[b:]

# --- 2) wsOturumu ---
a = t.find("DWORD wsOturumu(const UrlParca& u) {")
b = t.find("// Arka plan i", a)
assert a > 0 and b > a, ("wsOturumu sinirlari bulunamadi", a, b)
t = t[:a] + yeni_ws.replace("\r\n", "\n") + t[b:]

# --- 3) artik kullanilmayan polling handshake: uyari susturma ---
if "[[maybe_unused]] bool socketioBaslat(" not in t:
    t = t.replace("bool socketioBaslat(", "[[maybe_unused]] bool socketioBaslat(", 1)

out = t.replace("\n", "\r\n") if crlf else t
open(f, "w", encoding="utf-8", newline="").write(out)
print("TAMAM crlf=", crlf, "boyut=", len(out))
