import type { Knex } from "knex";

export async function seed(knex: Knex): Promise<void> {
  // Deletes all existing entries to avoid duplicates (use with caution in production)
  await knex("languages").del();

  // Comprehensive list of languages with ISO 639-1 codes
  const languages = [
    { lang_code: "aa", name: "Afar" },
    { lang_code: "ab", name: "Abkhazian" },
    { lang_code: "af", name: "Afrikaans" },
    { lang_code: "ak", name: "Akan" },
    { lang_code: "am", name: "Amharic" },
    { lang_code: "ar", name: "Arabic" },
    { lang_code: "as", name: "Assamese" },
    { lang_code: "ay", name: "Aymara" },
    { lang_code: "az", name: "Azerbaijani" },
    { lang_code: "ba", name: "Bashkir" },
    { lang_code: "be", name: "Belarusian" },
    { lang_code: "bg", name: "Bulgarian" },
    { lang_code: "bh", name: "Bihari" },
    { lang_code: "bi", name: "Bislama" },
    { lang_code: "bn", name: "Bengali" },
    { lang_code: "bo", name: "Tibetan" },
    { lang_code: "br", name: "Breton" },
    { lang_code: "bs", name: "Bosnian" },
    { lang_code: "ca", name: "Catalan" },
    { lang_code: "co", name: "Corsican" },
    { lang_code: "cs", name: "Czech" },
    { lang_code: "cy", name: "Welsh" },
    { lang_code: "da", name: "Danish" },
    { lang_code: "de", name: "German" },
    { lang_code: "dz", name: "Dzongkha" },
    { lang_code: "el", name: "Greek" },
    { lang_code: "en", name: "English" },
    { lang_code: "eo", name: "Esperanto" },
    { lang_code: "es", name: "Spanish" },
    { lang_code: "et", name: "Estonian" },
    { lang_code: "eu", name: "Basque" },
    { lang_code: "fa", name: "Persian" },
    { lang_code: "fi", name: "Finnish" },
    { lang_code: "fj", name: "Fijian" },
    { lang_code: "fo", name: "Faroese" },
    { lang_code: "fr", name: "French" },
    { lang_code: "fy", name: "Western Frisian" },
    { lang_code: "ga", name: "Irish" },
    { lang_code: "gd", name: "Scottish Gaelic" },
    { lang_code: "gl", name: "Galician" },
    { lang_code: "gn", name: "Guarani" },
    { lang_code: "gu", name: "Gujarati" },
    { lang_code: "ha", name: "Hausa" },
    { lang_code: "he", name: "Hebrew" },
    { lang_code: "hi", name: "Hindi" },
    { lang_code: "hr", name: "Croatian" },
    { lang_code: "hu", name: "Hungarian" },
    { lang_code: "hy", name: "Armenian" },
    { lang_code: "ia", name: "Interlingua" },
    { lang_code: "id", name: "Indonesian" },
    { lang_code: "ie", name: "Interlingue" },
    { lang_code: "ig", name: "Igbo" },
    { lang_code: "ik", name: "Inupiaq" },
    { lang_code: "is", name: "Icelandic" },
    { lang_code: "it", name: "Italian" },
    { lang_code: "iu", name: "Inuktitut" },
    { lang_code: "ja", name: "Japanese" },
    { lang_code: "jv", name: "Javanese" },
    { lang_code: "ka", name: "Georgian" },
    { lang_code: "kk", name: "Kazakh" },
    { lang_code: "kl", name: "Kalaallisut" },
    { lang_code: "km", name: "Khmer" },
    { lang_code: "kn", name: "Kannada" },
    { lang_code: "ko", name: "Korean" },
    { lang_code: "ks", name: "Kashmiri" },
    { lang_code: "ku", name: "Kurdish" },
    { lang_code: "ky", name: "Kyrgyz" },
    { lang_code: "la", name: "Latin" },
    { lang_code: "lb", name: "Luxembourgish" },
    { lang_code: "lg", name: "Ganda" },
    { lang_code: "li", name: "Limburgish" },
    { lang_code: "ln", name: "Lingala" },
    { lang_code: "lo", name: "Lao" },
    { lang_code: "lt", name: "Lithuanian" },
    { lang_code: "lv", name: "Latvian" },
    { lang_code: "mg", name: "Malagasy" },
    { lang_code: "mi", name: "Maori" },
    { lang_code: "mk", name: "Macedonian" },
    { lang_code: "ml", name: "Malayalam" },
    { lang_code: "mn", name: "Mongolian" },
    { lang_code: "mr", name: "Marathi" },
    { lang_code: "ms", name: "Malay" },
    { lang_code: "mt", name: "Maltese" },
    { lang_code: "my", name: "Burmese" },
    { lang_code: "nb", name: "Norwegian Bokmål" },
    { lang_code: "nd", name: "North Ndebele" },
    { lang_code: "ne", name: "Nepali" },
    { lang_code: "nl", name: "Dutch" },
    { lang_code: "nn", name: "Norwegian Nynorsk" },
    { lang_code: "no", name: "Norwegian" },
    { lang_code: "ny", name: "Chichewa" },
    { lang_code: "oc", name: "Occitan" },
    { lang_code: "oj", name: "Ojibwa" },
    { lang_code: "or", name: "Odia" },
    { lang_code: "pa", name: "Punjabi" },
    { lang_code: "pl", name: "Polish" },
    { lang_code: "ps", name: "Pashto" },
    { lang_code: "pt", name: "Portuguese" },
    { lang_code: "qu", name: "Quechua" },
    { lang_code: "rm", name: "Romansh" },
    { lang_code: "rn", name: "Rundi" },
    { lang_code: "ro", name: "Romanian" },
    { lang_code: "ru", name: "Russian" },
    { lang_code: "rw", name: "Kinyarwanda" },
    { lang_code: "sa", name: "Sanskrit" },
    { lang_code: "sc", name: "Sardinian" },
    { lang_code: "sd", name: "Sindhi" },
    { lang_code: "se", name: "Northern Sami" },
    { lang_code: "sg", name: "Sango" },
    { lang_code: "si", name: "Sinhala" },
    { lang_code: "sk", name: "Slovak" },
    { lang_code: "sl", name: "Slovenian" },
    { lang_code: "sm", name: "Samoan" },
    { lang_code: "sn", name: "Shona" },
    { lang_code: "so", name: "Somali" },
    { lang_code: "sq", name: "Albanian" },
    { lang_code: "sr", name: "Serbian" },
    { lang_code: "ss", name: "Swati" },
    { lang_code: "st", name: "Southern Sotho" },
    { lang_code: "su", name: "Sundanese" },
    { lang_code: "sv", name: "Swedish" },
    { lang_code: "sw", name: "Swahili" },
    { lang_code: "ta", name: "Tamil" },
    { lang_code: "te", name: "Telugu" },
    { lang_code: "tg", name: "Tajik" },
    { lang_code: "th", name: "Thai" },
    { lang_code: "ti", name: "Tigrinya" },
    { lang_code: "tk", name: "Turkmen" },
    { lang_code: "tl", name: "Tagalog" },
    { lang_code: "tn", name: "Tswana" },
    { lang_code: "to", name: "Tongan" },
    { lang_code: "tr", name: "Turkish" },
    { lang_code: "ts", name: "Tsonga" },
    { lang_code: "tt", name: "Tatar" },
    { lang_code: "tw", name: "Twi" },
    { lang_code: "ty", name: "Tahitian" },
    { lang_code: "ug", name: "Uyghur" },
    { lang_code: "uk", name: "Ukrainian" },
    { lang_code: "ur", name: "Urdu" },
    { lang_code: "uz", name: "Uzbek" },
    { lang_code: "ve", name: "Venda" },
    { lang_code: "vi", name: "Vietnamese" },
    { lang_code: "vo", name: "Volapük" },
    { lang_code: "wa", name: "Walloon" },
    { lang_code: "wo", name: "Wolof" },
    { lang_code: "xh", name: "Xhosa" },
    { lang_code: "yi", name: "Yiddish" },
    { lang_code: "yo", name: "Yoruba" },
    { lang_code: "za", name: "Zhuang" },
    { lang_code: "zh", name: "Chinese" },
    { lang_code: "zu", name: "Zulu" },
  ];

  // Add timestamps to each language record
  const timestamp = new Date();
  const languagesWithTimestamps = languages.map((lang) => ({
    ...lang,
    created_at: timestamp,
    updated_at: timestamp,
  }));

  // Insert all languages in a single query
  await knex("languages").insert(languagesWithTimestamps);
}