#coding=utf-8

require 'base64'

class Sso < ActiveRecord::Base
  belongs_to :user
  attr_accessible :email, :name, :openid, :password, :school, :sex, :user, :user_id

  validates :user_id, :user, :email, :openid, :presence => true

  def self.sync_user(opt)
    sso = Sso.where(openid: opt["openid"]).first
    return sso if sso

    sso = Sso.new
    sso.name     = opt["name"]
    sso.openid   = opt["openid"]
    sso.email    = opt["email"]
    sso.password = opt["password"]
    sso.school   = opt["school"]
    sso.sex      = opt["sex"]


    # 查邮箱
    user = User.where(mail: opt["email"]).first

    unless user
      # 查用户名

      user = User.where(login: opt["name"]).first
      if user
        # 跳到修改用户名
        raise "exist user"
      end

      password = opt["password"]
      if password.size < 8
        password = random_pwd
      end
      us = UsersService.new
      user = us.register(login: opt["name"], mail: opt["email"],
                         password: password,
                         :should_confirmation_password => false)
      if user.new_record?
        raise user.errors.full_messages.first
      end
    end

    sso.user = user
    sso.save!
    return sso
  end


  private
  def self.random_pwd
    ('a'..'z').to_a.shuffle[0..7].join
  end

end