#!/usr/bin/env python3.8
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.boxlayout import BoxLayout

import socket
import sys
# Información de red para conectarse al servidor
SERVER_ADDRESS = '192.168.0.148'
SERVER_PORT = 22222


class CalculadorApp(App):
    def __init__(self):
        super(CalculadorApp, self).__init__()
        self.btn_suma = Button(text='Suma', background_color=(66/255,255/255,0/255,1), size_hint=(.6, .2))
        self.btn_multiplica = Button(text='Multiplica', background_color=(66/255,255/255,0/255,1), size_hint=(.6, .2))
        self.btn_divide = Button(text='Divide', background_color=(66/255,255/255,0/255,1), size_hint=(.6, .2))
        self.btn_resta = Button(text='Resta', background_color=(66/255,255/255,0/255,1), size_hint=(.6, .2))
        self.lbl = Label(text='Escribe dos numeros arriba para calcular.')
        self.campo_texto = TextInput()
        self.campo_texto2 = TextInput()


    def operacion(self, opera):
        la_operacion = opera
        numero1 = int(self.campo_texto.text)
        numero2 = int(self.campo_texto2.text)

        data = la_operacion+','+str(numero1)+','+str(numero2)
        
        # Creamos el socket
        self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        
        #Nos conectamos al servidor
        self.s.connect((SERVER_ADDRESS, SERVER_PORT))
        
        # Convertimoslos datos en bytes. (solo para Python 3)
        data = data.encode()
        
        # Envian
        self.s.send(data)
        
        #Recibimos el resultado desde el servidor
        data2 = self.s.recv(2048)
        if not data2:
            print("Server abended. Exiting")

        # Convert back to string for python3
        data2 = data2.decode()
        print("Got this string from server:")
        print(data2 + '\n')

        self.s.close()

        return data2


    def click_sumar(self, obj):
        opera = 'SUMA'
        respuesta = self.operacion(opera) #llamamos a una función dentro de otra función (traemos el resultado de la operación)
        self.btn_suma.text = 'Operación sumar'
        respuesta = respuesta.split(',')
        operacion = respuesta[0]
        resultado = respuesta[1]
        fin_operacion = respuesta[2]

        print(str(resultado))
        self.lbl.text = 'El servidor estuvo: '+str(operacion)+' y su resultado es: '+str(resultado)

    def click_multiplicar(self, obj):
        opera = 'MULTIPLICA'
        respuesta = self.operacion(opera)
        self.btn_multiplica.text = 'Operación multiplicar'
        respuesta = respuesta.split(',')
        operacion = respuesta[0]
        resultado = respuesta[1]
        fin_operacion = respuesta[2]
        print(str(resultado))
        self.lbl.text = 'El servidor estuvo: '+str(operacion)+' y su resultado es: '+str(resultado)


    def click_divide(self, obj):
        opera = 'DIVIDE'
        respuesta = self.operacion(opera)
        self.btn_divide.text = 'Operación dividir'
        respuesta = respuesta.split(',')
        operacion = respuesta[0]
        resultado = respuesta[1]
        fin_operacion = respuesta[2]
        print(str(resultado))
        self.lbl.text = 'El servidor estuvo: '+str(operacion)+' y su resultado es: '+str(resultado)

    def click_resta(self, obj):
        opera = 'RESTA'
        respuesta = self.operacion(opera)
        self.btn_resta.text = 'Operación restar'
        respuesta = respuesta.split(',')
        operacion = respuesta[0]
        resultado = respuesta[1]
        fin_operacion = respuesta[2]
        print(str(resultado))
        self.lbl.text = 'El servidor estuvo: '+str(operacion)+' y su resultado es: '+str(resultado)
        
    
    def build(self):
        self.btn_suma.bind(on_press=self.click_sumar)
        self.btn_multiplica.bind(on_press=self.click_multiplicar)
        self.btn_divide.bind(on_release=self.click_divide)
        self.btn_resta.bind(on_release=self.click_resta)
        layout = BoxLayout()
        layout.orientation = 'vertical'
        layout.add_widget(self.campo_texto)
        layout.add_widget(self.campo_texto2)
        layout.add_widget(self.lbl)
        layout.add_widget(self.btn_suma)
        layout.add_widget(self.btn_multiplica)
        layout.add_widget(self.btn_divide)
        layout.add_widget(self.btn_resta)
        return layout    

MainLayout = CalculadorApp()
MainLayout.run()
