import datetime
import project_sets


def get_ld_vacancies(data_Dict):

    # Разметку JobPosting можно размещать только на страницах, которые содержат одно объявление о вакансии.
    # Не разрешается добавлять разметку JobPosting на какие-либо другие страницы, в том числе те, на которых нет информации ни об одной вакансии.

    vacancies_list = []

    for item in data_Dict:
        data = {
            "@context": "https://schema.org/",
            "@type": "JobPosting",
            "title": item['title'],
            "description": item['description'],
            "datePosted": datetime.datetime.now().strftime('%Y-%m-%d'),
            "validThrough": item['validThrough'].strftime('%Y-%m-%dT%H:%M'), #"2017-03-18T00:00", # окончание срока действия
            "identifier": {
                "@type": "PropertyValue",
                "name": project_sets.company_name,
                "value": str(item['id'])
            },
            "hiringOrganization": {
                "@type": "Organization",
                "name": project_sets.company_name,
                "sameAs": project_sets.domain,
                "logo": project_sets.logo
            },
        }

        if 'office' in item:
            # используется для указания места, в котором сотрудник будет выполнять работу. Если определенного места (например, офиса или производственной площадки) нет, использовать это свойство не обязательно.
            job_place_Dict = {
                "jobLocation": {
                    "@type": "Place",
                    "address": {
                        "@type": "PostalAddress",
                        "streetAddress": item['office'].address,
                        "addressLocality": item['office'].city,
                        "addressCountry": "BY"
                    },
                },
            }
        else:
            job_place_Dict = {
                "jobLocationType": "TELECOMMUTE"  # только удаленка
            }
        data.update(job_place_Dict)

        if 'required_country_of_residence' in item:
            # используется для указания территории, на которой может проживать кандидат на должность. Необходимо, чтобы была задана по меньшей мере одна страна
            required_country_of_residence = {
                "applicantLocationRequirements": {
                    "@type": "Country",
                    "name": item['required_country_of_residence']['country']
                },
            }
            data.update(required_country_of_residence)

        if 'salary' in item:
            salary_Dict = {
                "baseSalary": {
                    "@type": "MonetaryAmount",
                    "currency": item['salary']['currency'],
                    "value": {
                        "@type": "QuantitativeValue",
                        "unitText": item['salary']['time_unit']
                        # HOUR
                        # DAY
                        # WEEK
                        # MONTH
                        # YEAR
                    }
                }
            }
            if 'price' in item['salary']:
                salary_Dict['baseSalary']['value']['value'] = item['salary']['price']
            elif 'price_from' in item['salary']:
                salary_Dict['baseSalary']['value']['minValue'] = item['salary']['price_from']

            if 'price_to' in item['salary']:
                salary_Dict['baseSalary']['value']['maxValue'] = item['salary']['price_to']

            data.update(salary_Dict)

        # Указание на то, поддерживается ли на странице с объявлением о вакансии отправка резюме напрямую.
        data.update({
            'directApply': item['directApply']
        })

        # Вид занятости Укажите одно или несколько значений
        if 'employmentType' in item:
            # FULL_TIME
            # PART_TIME
            # CONTRACTOR
            # TEMPORARY
            # INTERN
            # VOLUNTEER
            # PER_DIEM
            # OTHER
            data.update({
                'employmentType': item['employmentType']
            })

        if 'educationRequirements' in item:
            e_Dict = {
                "educationRequirements": {
                    "@type": "EducationalOccupationalCredential",
                    "credentialCategory": item['educationRequirements']
                    # high school
                    # associate degree
                    # bachelor degree
                    # professional certificate
                    # postgraduate degree
                },
            }
            data.update(e_Dict)

        if 'experienceRequirements' in item:
            e_Dict = {
                "experienceRequirements": {
                    "@type": "OccupationalExperienceRequirements",
                    "monthsOfExperience": item['experienceRequirements'] # опыт работы в месяцах
                },
            }
            data.update(e_Dict)

        # Со значением "истина" это свойство будет указывать на то, что кандидатам достаточно иметь опыт, если у них нет требуемого образования
        if 'required_only_experience' in item:
            if 'experienceRequirements' in item and 'educationRequirements' in item:
                data.update({
                    'experienceInPlaceOfEducation': item['required_only_experience']
                })

        vacancies_list.append(data)

    return vacancies_list

