import { BaseModel } from "./BaseModel";
import { CustomPage } from "./CustomPage";
import { ToolPrompt } from "./ToolPrompt";
import { ToolPage } from "./ToolPage";
import { Blogs } from "./Blogs";

export class Language extends BaseModel {
  static tableName = "languages";

  id!: number;
  lang_code?: string | null;
  name?: string | null;
  created_at?: string;
  updated_at?: string;
  deleted_at?: string | null;

  // ✅ TypeScript: Related properties
  customPages?: CustomPage[];
  toolPrompts?: ToolPrompt[];
  toolPages?: ToolPage[];
  blogs?: Blogs[];

  $formatDatabaseJson(json: any) {
    json = super.$formatDatabaseJson(json);

    const formatDate = (d: Date | string) => {
      if (!d) return null;
      const date = new Date(d);
      const pad = (n: number) => n.toString().padStart(2, "0");
      return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(
        date.getDate()
      )} ${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(
        date.getSeconds()
      )}`;
    };

    if (json.created_at) json.created_at = formatDate(json.created_at);
    if (json.updated_at) json.updated_at = formatDate(json.updated_at);
    if (json.deleted_at) json.deleted_at = formatDate(json.deleted_at);

    return json;
  }

  static relationMappings = () => ({
    customPages: {
      relation: BaseModel.HasManyRelation,
      modelClass: CustomPage,
      join: {
        from: "languages.id",
        to: "custom_pages.lang",
      },
    },
    toolPrompts: {
      relation: BaseModel.HasManyRelation,
      modelClass: ToolPrompt,
      join: {
        from: "languages.id",
        to: "tool_prompts.lang",
      },
    },
    toolPages: {
      relation: BaseModel.HasManyRelation,
      modelClass: ToolPage,
      join: {
        from: "languages.id",
        to: "tool_pages.lang",
      },
    },
    blogs: {
      relation: BaseModel.HasManyRelation,
      modelClass: Blogs,
      join: {
        from: "languages.id",
        to: "blogs.lang",
      },
    },
  });
}
