#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
    demeter load
    author:rabin
"""
import tornado.web
from demeter.core import *
import json

class Base(tornado.web.RequestHandler):
	def initialize(self):
		self.data = {}
		self.page()
		self.search()
		self.cookie()
		self.setting()
		self.assign()

	def get_current_user(self):
		return self.get_secure_cookie(self.KEYS[1])

	def assign(self):
		self.data['setting'] = Demeter.config['setting']
		
	def cookie(self):
		for key in self.KEYS:
			cookie = None
			if key in Demeter.config['base']:
				cookie = Demeter.config['base'][key]
			if not cookie:
				cookie = self.get_secure_cookie(key)
				#cookie = self.get_cookie(key)
			if not cookie:
				value = self.input(key)
				if value:
					#self.set_secure_cookie(key, value)
					Demeter.config['setting'][key] = value
				else:
					Demeter.config['setting'][key] = 0
			else:
				Demeter.config['setting'][key] = cookie

	def page(self):
		Demeter.config['page'] = {}
		page = self.input('page')
		if page:
			Demeter.config['page']['ajax'] = True
		else:
			Demeter.config['page']['ajax'] = False
			page = 1
		Demeter.config['page']['current'] = page
		Demeter.config['page']['total'] = 0
		self.data['page'] = Demeter.config['page']

	def search(self):
		data = self.request.arguments
		self.data['search'] = {}
		self.data['update'] = {}
		for key in data:
			if 'search_' in key:
				index = key.replace('search_', '')
				self.data['search'][index] = ",".join(data[key])
			if 'update_' in key:
				index = key.replace('update_', '')
				self.data['update'][index] = ",".join(data[key])

	def input(self, key, value=None):
		return self.get_argument(key, value)

	def service(self, name):
		return Demeter.service(name)

	def model(self, name):
		return Demeter.model(name)

	def common(self, **kwd):
		self.data['common'] = kwd
		farm = str(Demeter.config['setting']['farm'])
		self.data['common']['argvs'] = '&farm=' + farm + '&search_farm_id-select-=' + farm

	def commonView(self, name):
		self.view('common/'+name+'.html')

	def commonList(self, model):
		self.data['state'] = self.input('state', True)
		self.data['list'] = self.service('common').list(model, state=self.data['state'], search=self.data['search'], page=True)

	def commonOne(self, model, **kwd):
		id = self.input('id')
		self.data['info'] = {}
		if id:
			kwd['id'] = id
		if kwd:
			self.data['info'] = self.service('common').one(model, **kwd)
		if not self.data['info'] and Demeter.config['setting']['farm'] > 0:
			self.data['info']['farm_id'] = Demeter.config['setting']['farm']

	def commonUpdate(self, model, msg='', id=0, **kwd):
		if not self.data['auth']:
			self.auth()
		else:
			if id <= 0:
				id = self.input('id')
			if kwd:
				info = self.service('common').one(model, **kwd)
				if id:
					id = int(id)
				if info and (id != info['id']):
					self.out(msg)
					return
			state = self.service('common').update(model, id, self.data['update'])
			self.log(model, 'update', self.data['update'])
			self.out('yes', {'id':state})
			return state

	def commonDelete(self, model):
		if not self.data['auth']:
			self.auth()
		else:
			id = self.input('id')
			state = self.input('state', False)
			state = self.service('common').delete(model, id, state)
			self.log(model, 'delete', {id:id, state:state})
			self.out('yes', {'state':state})

	def log(self, model, method, data):
		insert = {}
		insert['admin_id'] = Demeter.config['setting']['admin']
		insert['model'] = model
		insert['method'] = method
		insert['data'] = json.dumps(data)
		self.service('common').update('manage_log', None, insert)

	def view(self, name):
		if not self.data['auth']:
			self.auth()
		else:
			self.render(name, data=self.data)

	def auth(self):
		self.out('您没有权限')

	def out(self, msg='', data={}, code=0):
		callback = self.input('callback')
		function = self.input('function')
		result = ''
		send = {}
		send['status'] = 1
		send['msg'] = msg
		send['data'] = data
		send['code'] = code
		if not send['data']:
			send['status'] = 2
		result = json.dumps(send)
		if callback:
			result = callback + '(' + result + ')'
		elif function:
			result = '<script>parent.' + function + '(' + result + ')' + '</script>';
		self.write(result)
		#self.finish(result)