# -*- coding: utf-8 -*-
"""
Created on Sun Sep 20 10:20:32 2020

@author: Oleg Chekin
"""
import numpy as np
import math as m

constants = {
    '90': 90 * 3600,
    '180': 180 * 3600,
    '270': 270 * 3600,
    '360': 360 * 3600,
    'ro': int(round(180 / np.pi * 3600)),
    'sec_r': np.pi / (180 * 3600),
    'n': 15,
}


def grad_r_sek(g, m=0, s=0):
    """ Переводит значение угла из градусов в секунды.
        На вход принимает значение угла в формате (g, m, s).
        Обязательный аргумент: g - градусы.
        Два не обязательных аргумента: m - минуты; s - секунды (по умолчанию
        равны 0)
        Возвращает значение угла в секундах.
    """
    s = g * 3600 + m * 60 + s
    return s


def grad_r_sek_list(a=list):
    """ Переводит значение угла из градусов в секунды.
        На вход принимает значение угла в формате [g, m, s].
        Обязательный аргумент: g - градусы.
        Два не обязательных аргумента: m - минуты; s - секунды (по умолчанию
        равны 0)
        Возвращает значение угла в секундах.
    """
    s = a[0] * 3600 + a[1] * 60 + a[2]
    return s


def sek_r_grad(s):
    """ Обратная функция для grad_r_sek.
        На вход принимает значение угла в секундах.
        Возвращает список в формате [g, m , s]
        g - градусы; m - минуты; s - секунды.
        Значения секунд округляються по правилам математики до 4 разряда
    """
    A = []
    A.append(int(s // 3600))
    A.append(int(m.fmod(s, 3600) // 60))
    A.append(float('{:.4f}'.format(m.fmod(m.fmod(s, 3600), 60))))
    return A

def sek_r_grad_str(s):
    """ Обратная функция для grad_r_sek.
        На вход принимает значение угла в секундах.
        Возвращает список в формате [g, m , s]
        g - градусы; m - минуты; s - секунды.
        Значения секунд округляються по правилам математики до 4 разряда
    """
    str_1 = (str(int(s // 3600)) + '° ' + str(int(m.fmod(s, 3600) // 60))
           + "' " + str(float('{:.4f}'.format(m.fmod(m.fmod(s, 3600), 60)))) + '"')

    return str_1


def gradVrad(angele_in_seconds):
    """ Принимает на вход значение угла в угловых секундах возвращает
        значение угла в радианах
    """
    angle_in_radians = angele_in_seconds * np.pi / (180 * 3600)
    return float('{:.9f}'.format(angle_in_radians))


def radVgrad(angle_in_radians):
    """ Принимает на вход значение угла в радианах возвращает
        значение угла в угловых секундах
    """
    angele_in_seconds = (angle_in_radians * 180 * 3600) / np.pi
    return float('{:.4f}'.format(angele_in_seconds))

