from django.shortcuts import render
from django.shortcuts import render

import json
from django.conf import settings
from django.shortcuts import render
from company.models import *
from masters.models import *
from company.forms import *
from financial_year.models import *
from privilege.models import *
import hashlib
import os
from django.conf import settings
from datetime import datetime
from django.utils import timezone
from django.db.models import Max, F, Q
import base64
from django.shortcuts import render
from io import BytesIO
from django.conf import settings
from django.template.loader import get_template
from django.http import HttpResponse,JsonResponse,HttpResponseRedirect
from django.shortcuts import get_object_or_404
from django.templatetags.static import static
from xhtml2pdf import pisa
from num2words import num2words
from django.contrib.staticfiles import finders
from common.utils import *



#```````````````````````````````````````````````````````````**COMPANY**````````````````````````````````````````````````````````````````````````````````

def company(request):
    if 'user_id' in request.session:
        user_type = request.session.get('user_type')
        if user_type == 'admin':
            company = select_row(company_table, {'id':1})
            year = selectList(financial_year_table, order_by='name')
            tax = selectList(tax_table, order_by='name')
            return render(request, 'company.html', {'company': company,'year':year,'tax':tax})
        else:
            return HttpResponseRedirect("/")
    else:
        return HttpResponseRedirect("/")


def update_company(request):
    if request.method == "POST":
        company_id = request.POST.get('company_id')
        user_id = request.session.get('user_id')
        role_id = request.session.get('role_id')

        has_access, error_message = check_user_access(role_id, 'company', "update")

        if not has_access:
            return JsonResponse({'message': 'warning', 'error_message': 'You do not have permission to update the company details'})

        
        company_instance = company_table.objects.get(id=company_id)
        form = companyform(request.POST, request.FILES, instance=company_instance)
        
        if form.is_valid():
            name = request.POST.get('name')
            company_code = request.POST.get('code')
            email = request.POST.get('email')
            add1 = request.POST.get('address1', '').strip()  
            add2 = request.POST.get('address2', '').strip() 
            city = request.POST.get('city')
            state = request.POST.get('state')
            pincode = request.POST.get('pincode')
            gst = request.POST.get('gst')
            c_no = request.POST.get('c_no')
            statecode = request.POST.get('statecode')
            sales_phone = request.POST.get('sales_phone')
            service_phone = request.POST.get('service_phone')
            store_support_phone = request.POST.get('store_support_phone')
            financial_year = request.POST.get('financial_year')
            cp_name = request.POST.get('cp_name')
            cp_email = request.POST.get('cp_email')
            cp_mobile = request.POST.get('cp_mobile')
            cp_phone = request.POST.get('cp_phone')
            report_mail = request.POST.get('report_mail')
            latitude = request.POST.get('start_latitude', '').strip()
            longitude = request.POST.get('start_longitude', '').strip()
            tax_id = request.POST.get('tax_id') or 0

            if latitude == '':
                latitude = None
            if longitude == '':
                longitude = None


            company_instance.name = name
            company_instance.tax_id = tax_id
            company_instance.company_code = company_code
            company_instance.email = email
            company_instance.address_line_1 = add1
            company_instance.address_line_2 = add2           
            company_instance.city = city
            company_instance.state = state
            company_instance.pincode = pincode
            company_instance.gst = gst
            company_instance.cin = c_no
            company_instance.statecode = statecode
            company_instance.sales_phone = sales_phone
            company_instance.service_phone = service_phone
            company_instance.store_support_phone = store_support_phone
            company_instance.current_fy = financial_year
            company_instance.cp_name = cp_name
            company_instance.cp_mail = cp_email
            company_instance.cp_mobile = cp_mobile
            company_instance.cp_phone = cp_phone
            company_instance.report_mail = report_mail           
            company_instance.latitude = latitude           
            company_instance.longitude = longitude  
            company_instance.updated_on = date_time
            company_instance.updated_by = user_id            
            form.save()         
          
            return JsonResponse({'message': 'success'})

        else:
            errors = form.errors.get_json_data()
            return JsonResponse({
                'message': 'error',
                'errors': errors,  # This will contain the specific validation errors
                'error_message': 'Form validation failed'  # This can be a fallback message
            })

