import { getValidDate as f } from "../../../utils/getValidDate.js";
import { getPropertyByString as i } from "@m4l/core";
const p = (u, e) => {
  const r = i(u, e.n, void 0);
  if (r !== void 0) {
    if (e.o === "e") {
      if (r === e.o1)
        return !0;
    } else if (e.o === "ne" && r !== e.o1)
      return !0;
    return !1;
  }
  return !0;
}, g = (u, e, r = !0) => {
  const t = i(u, e.n, void 0);
  if (typeof e.o1 != "string")
    return !0;
  if (t !== void 0) {
    if (e.o === "e") {
      if (t === e.o1)
        return !0;
    } else if (e.o === "ne") {
      if (t !== e.o1)
        return !0;
    } else if (e.o === "c") {
      if (t.toLocaleLowerCase().includes(e.o1.toLocaleLowerCase()))
        return !0;
    } else if (e.o === "nc" && !t.toLocaleLowerCase().includes(e.o1.toLocaleLowerCase()))
      return !0;
    return !1;
  }
  return r;
}, l = (u, e, r = !0) => {
  const t = i(u, e.n, void 0);
  if (typeof e.o1 != "number")
    return !0;
  if (t !== void 0) {
    if (e.o === "e") {
      if (t === e.o1)
        return !0;
    } else if (e.o === "ne") {
      if (t !== e.o1)
        return !0;
    } else if (e.o === "b") {
      if (typeof e.o2 != "number" || t >= e.o1 && t <= e.o2)
        return !0;
    } else if (e.o === "gt") {
      if (t > e.o1)
        return !0;
    } else if (e.o === "lt") {
      if (t < e.o1)
        return !0;
    } else if (e.o === "gte") {
      if (t >= e.o1)
        return !0;
    } else if (e.o === "lte" && t <= e.o1)
      return !0;
    return !1;
  }
  return r;
}, b = (u, e) => {
  const r = i(u, e.n, void 0);
  if (r === void 0)
    return !0;
  const t = f(r);
  if (t === null)
    return !0;
  const s = f(e.o1);
  if (s === null)
    return !0;
  if (e.o === "e") {
    if (t.getTime() === s.getTime())
      return !0;
  } else if (e.o === "ne") {
    if (t.getTime() !== s.getTime())
      return !0;
  } else if (e.o === "b") {
    const a = f(e.o2);
    if (a === null || t.getTime() >= s.getTime() && t.getTime() <= a.getTime())
      return !0;
  } else if (e.o === "gt") {
    if (t.getTime() > s.getTime())
      return !0;
  } else if (e.o === "lt") {
    if (t.getTime() < s.getTime())
      return !0;
  } else if (e.o === "gte") {
    if (t.getTime() >= s.getTime())
      return !0;
  } else if (e.o === "lte" && t.getTime() <= s.getTime())
    return !0;
  return !1;
}, v = (u, e) => {
  const r = i(u, e.n, void 0);
  return r === void 0 || !(typeof r == "string" || typeof r == "number") || !e.oa ? !0 : e.o === "in" ? e.oa.includes(r) : e.o === "nin" ? !e.oa.includes(r) : !1;
}, I = (u, e) => {
  const r = i(u, e.n, void 0);
  return r === void 0 || !(typeof r == "string" || typeof r == "number") || !e.oa ? !0 : e.o === "in" ? e.oa.includes(r) : e.o === "nin" ? !e.oa.includes(r) : !1;
}, N = (u, e, r) => {
  let t = !0;
  for (const s of Object.keys(r)) {
    const a = r[s];
    let n = !1;
    if (a.forEach((o) => {
      o.n === "all" ? u.forEach((c) => {
        const y = !isNaN(Number(o.o1)), m = {
          n: c.name,
          o: "c",
          o1: o.o1,
          ft: c.type
        };
        if (c.type === "string") {
          const T = g(e, m, !1);
          n = n || T;
        }
        y && c.type === "number" && (n = n || l(e, {
          ...m,
          o: "e",
          o1: Number(o.o1)
        }, !1));
      }) : o.ft === "boolean" ? n = n || p(e, o) : o.ft === "string" ? n = n || g(e, o) : o.ft === "number" ? n = n || l(e, o) : o.ft === "datetime" ? n = n || b(e, o) : o.ft === "select" ? n = n || I(e, o) : o.ft === "selectAsync" ? n = n || v(e, o) : n = !0;
    }), !n) {
      t = !1;
      break;
    }
  }
  return t;
};
function V(u) {
  return u.reduce((r, t) => (r[t.n] || (r[t.n] = []), r[t.n].push(t), r), {});
}
export {
  V as getFilterGroupFieldsByName,
  N as getIsIfInDynamicFilter
};
