# encoding: UTF-8

module SignaturesControllerHelpers
#  def SignaturesControllerHelpers.guess_names(names, firstnames, lastname)
  def guess_names(names, firstnames, lastname)
    # let's make sure lastname is just characters before interpolating it into regexp
    unless justNameCharacters(lastname)
      Logger.error "Lastname #{lastname.to_s} is not just characters"
    else
      if m = /^\s*#{lastname}\s*/.match(names)          # known lastname is at the beginning
        firstnames = m.post_match
      elsif m = /\s*#{lastname}\s*$/.match(names)       # known lastname is at the end
        firstnames = m.pre_match
      end
    end
    return firstnames, lastname
  end

 # def SignaturesControllerHelpers.justNameCharacters(name)
  def justNameCharacters(name)
    name =~ /^[\wäÄöÖåÅ \-]+$/
  end

  def hetu_like(hetu)
    hetu =~ /^\d{6}[\-+A]\d{3}[A-Z\d]$/
  end

  def municipalities
    [
      "Akaa",
      "Alajärvi",
      "Alavieska",
      "Alavus",
      "Asikkala",
      "Askola",
      "Aura",
      "Brändö",
      "Eckerö",
      "Enonkoski",
      "Enontekiö",
      "Espoo",
      "Eura",
      "Eurajoki",
      "Evijärvi",
      "Finström",
      "Forssa",
      "Föglö",
      "Geta",
      "Haapajärvi",
      "Haapavesi",
      "Hailuoto",
      "Halsua",
      "Hamina",
      "Hammarland",
      "Hankasalmi",
      "Hanko",
      "Harjavalta",
      "Hartola",
      "Hattula",
      "Haukipudas",
      "Hausjärvi",
      "Heinola",
      "Heinävesi",
      "Helsinki",
      "Hirvensalmi",
      "Hollola",
      "Honkajoki",
      "Huittinen",
      "Humppila",
      "Hyrynsalmi",
      "Hyvinkää",
      "Hämeenkoski",
      "Hämeenkyrö",
      "Hämeenlinna",
      "Ii",
      "Iisalmi",
      "Iitti",
      "Ikaalinen",
      "Ilmajoki",
      "Ilomantsi",
      "Imatra",
      "Inari",
      "Inkoo",
      "Isojoki",
      "Isokyrö",
      "Jalasjärvi",
      "Janakkala",
      "Joensuu",
      "Jokioinen",
      "Jomala",
      "Joroinen",
      "Joutsa",
      "Juankoski",
      "Juuka",
      "Juupajoki",
      "Juva",
      "Jyväskylä",
      "Jämijärvi",
      "Jämsä",
      "Järvenpää",
      "Kaarina",
      "Kaavi",
      "Kajaani",
      "Kalajoki",
      "Kangasala",
      "Kangasniemi",
      "Kankaanpää",
      "Kannonkoski",
      "Kannus",
      "Karijoki",
      "Karjalohja",
      "Karkkila",
      "Karstula",
      "Karvia",
      "Kaskinen",
      "Kauhajoki",
      "Kauhava",
      "Kauniainen",
      "Kaustinen",
      "Keitele",
      "Kemi",
      "Kemijärvi",
      "Keminmaa",
      "Kemiönsaari",
      "Kempele",
      "Kerava",
      "Kerimäki",
      "Kesälahti",
      "Keuruu",
      "Kihniö",
      "Kiikoinen",
      "Kiiminki",
      "Kinnula",
      "Kirkkonummi",
      "Kitee",
      "Kittilä",
      "Kiuruvesi",
      "Kivijärvi",
      "Kokemäki",
      "Kokkola",
      "Kolari",
      "Konnevesi",
      "Kontiolahti",
      "Korsnäs",
      "Koski Tl",
      "Kotka",
      "Kouvola",
      "Kristiinankaupunki",
      "Kruunupyy",
      "Kuhmo",
      "Kuhmoinen",
      "Kumlinge",
      "Kuopio",
      "Kuortane",
      "Kurikka",
      "Kustavi",
      "Kuusamo",
      "Kyyjärvi",
      "Kärkölä",
      "Kärsämäki",
      "Kökar",
      "Köyliö",
      "Lahti",
      "Laihia",
      "Laitila",
      "Lapinjärvi",
      "Lapinlahti",
      "Lappajärvi",
      "Lappeenranta",
      "Lapua",
      "Laukaa",
      "Lavia",
      "Lemi",
      "Lemland",
      "Lempäälä",
      "Leppävirta",
      "Lestijärvi",
      "Lieksa",
      "Lieto",
      "Liminka",
      "Liperi",
      "Lohja",
      "Loimaa",
      "Loppi",
      "Loviisa",
      "Luhanka",
      "Lumijoki",
      "Lumparland",
      "Luoto",
      "Luumäki",
      "Luvia",
      "Länsi-Turunmaa",
      "Maalahti",
      "Maaninka",
      "Maarianhamina",
      "Marttila",
      "Masku",
      "Merijärvi",
      "Merikarvia",
      "Miehikkälä",
      "Mikkeli",
      "Muhos",
      "Multia",
      "Muonio",
      "Mustasaari",
      "Muurame",
      "Mynämäki",
      "Myrskylä",
      "Mäntsälä",
      "Mänttä-Vilppula",
      "Mäntyharju",
      "Naantali",
      "Nakkila",
      "Nastola",
      "Nilsiä",
      "Nivala",
      "Nokia",
      "Nousiainen",
      "Nummi-Pusula",
      "Nurmes",
      "Nurmijärvi",
      "Närpiö",
      "Orimattila",
      "Oripää",
      "Orivesi",
      "Oulainen",
      "Oulu",
      "Oulunsalo",
      "Outokumpu",
      "Padasjoki",
      "Paimio",
      "Paltamo",
      "Parikkala",
      "Parkano",
      "Pedersören kunta",
      "Pelkosenniemi",
      "Pello",
      "Perho",
      "Pertunmaa",
      "Petäjävesi",
      "Pieksämäki",
      "Pielavesi",
      "Pietarsaari",
      "Pihtipudas",
      "Pirkkala",
      "Polvijärvi",
      "Pomarkku",
      "Pori",
      "Pornainen",
      "Porvoo",
      "Posio",
      "Pudasjärvi",
      "Pukkila",
      "Punkaharju",
      "Punkalaidun",
      "Puolanka",
      "Puumala",
      "Pyhtää",
      "Pyhäjoki",
      "Pyhäjärvi",
      "Pyhäntä",
      "Pyhäranta",
      "Pälkäne",
      "Pöytyä",
      "Raahe",
      "Raasepori",
      "Raisio",
      "Rantasalmi",
      "Ranua",
      "Rauma",
      "Rautalampi",
      "Rautavaara",
      "Rautjärvi",
      "Reisjärvi",
      "Riihimäki",
      "Ristiina",
      "Ristijärvi",
      "Rovaniemi",
      "Ruokolahti",
      "Ruovesi",
      "Rusko",
      "Rääkkylä",
      "Saarijärvi",
      "Salla",
      "Salo",
      "Saltvik",
      "Sastamala",
      "Sauvo",
      "Savitaipale",
      "Savonlinna",
      "Savukoski",
      "Seinäjoki",
      "Sievi",
      "Siikainen",
      "Siikajoki",
      "Siikalatva",
      "Siilinjärvi",
      "Simo",
      "Sipoo",
      "Siuntio",
      "Sodankylä",
      "Soini",
      "Somero",
      "Sonkajärvi",
      "Sotkamo",
      "Sottunga",
      "Sulkava",
      "Sund",
      "Suomenniemi",
      "Suomussalmi",
      "Suonenjoki",
      "Sysmä",
      "Säkylä",
      "Taipalsaari",
      "Taivalkoski",
      "Taivassalo",
      "Tammela",
      "Tampere",
      "Tarvasjoki",
      "Tervo",
      "Tervola",
      "Teuva",
      "Tohmajärvi",
      "Toholampi",
      "Toivakka",
      "Tornio",
      "Turku",
      "Tuusniemi",
      "Tuusula",
      "Tyrnävä",
      "Töysä",
      "Ulvila",
      "Urjala",
      "Utajärvi",
      "Utsjoki",
      "Uurainen",
      "Uusikaarlepyy",
      "Uusikaupunki",
      "Vaala",
      "Vaasa",
      "Valkeakoski",
      "Valtimo",
      "Vantaa",
      "Varkaus",
      "Vehmaa",
      "Vesanto",
      "Vesilahti",
      "Veteli",
      "Vieremä",
      "Vihanti",
      "Vihti",
      "Viitasaari",
      "Vimpeli",
      "Virolahti",
      "Virrat",
      "Vähäkyrö",
      "Vårdö",
      "Vöyri",
      "Yli-Ii",
      "Ylitornio",
      "Ylivieska",
      "Ylöjärvi",
      "Ypäjä",
      "Ähtäri",
      "Äänekoski",
      "Ulkomaat",
    ]
  end

  def shortcut_session_valid_time
    minutes(authentication_valid_mins)
  end

  def shortcut_session_valid?
    current_citizen and session["authenticated_at"] =~ /\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d[+\-]\d\d:\d\d/ and shortcut_session_remaining_mins > 0.0
  end

  def shortcut_session_remaining_mins
    if current_citizen and session["authenticated_at"]
      age = authentication_age(session["authenticated_at"])
      remaining = (shortcut_session_valid_time - age) / minutes(1)
    else
      0.0
    end
  end

private

  def authentication_age(authenticated_at)
    (DateTime.now - DateTime.parse(authenticated_at))
  end

  def minutes(mins)
    mins_of_day = 1.0/24/60
    mins * mins_of_day
  end

  def authentication_valid_mins
    (ENV['AUTHENTICATION_VALID_MINUTES'] and ENV['AUTHENTICATION_VALID_MINUTES'].to_i) || 3
  end

end
