package dbfields;

import android.content.Context;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.AttributeSet;
import android.widget.EditText;

import java.text.ParseException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

import kz.istt.locust.Tools;

public class DateTimeTM extends com.google.android.material.textfield.TextInputEditText implements fieldDB
{
	private String m_Value = null; //Строка с датой в формате: "YYYY-mm-dd hh:mm:ss" без часового пояса так как храню время в гринвиче на сервере

	public DateTimeTM(Context context)
	{
		super(context);
	}
	public DateTimeTM(Context context, AttributeSet attrs)
	{
		super(context,attrs);
	}
	
	public String getValue(){
		return m_Value;
	}

	public void setValue(String val)
	{
		m_Value = null; //Присваиваю ниже так как нужно только проверянное значение даты
		if(val!=null && !val.equals(""))
		{
			Date date=null;
			try {
				date = new Date(Long.parseLong(val)*1000);
				SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //Теперь для простого преобразования в тип даты PostgreSQL дату храню в виде текста в формате "yyyy-MM-dd HH:mm:ss"
				m_Value=format.format(date);
			} catch (NumberFormatException e) {
			}
			if(date==null){
				try {
					SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
					date = format.parse(val);
					m_Value = val;
				} catch (ParseException e) {
                }
            }
			if(date!=null) {
				SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy HH:mm"); //Убрал секунды так всё равно то что отображается не соответствует тому что храниться
				String str = format.format(date);
				setText(str);
			}else{
				setText("");
			}
		}else
		{
			setText("");
		}
	}

	// Класс для сохранения изменений сделаных пользователем при повороте экрана
	public static class SavedStateTDTM extends BaseSavedState
	{
		String value = ""; //Не может быть null почемуто вылетает!

		SavedStateTDTM(Parcelable superState)
		{
			super(superState);
		}

		@Override
		public void writeToParcel(Parcel out, int flags)
		{
			super.writeToParcel(out, flags);
			out.writeString(value);
		}

		public static final Creator<SavedStateTDTM>	CREATOR	= new Creator<SavedStateTDTM>()
																	{
																		public SavedStateTDTM createFromParcel(Parcel in) { return new SavedStateTDTM(in); }
																		public SavedStateTDTM[] newArray(int size)
																		{
																			return new SavedStateTDTM[size];
																		}
																	};

		private SavedStateTDTM(Parcel in)
		{
			super(in);
			value = in.readString();
		}

	}

	@Override
	public Parcelable onSaveInstanceState()
	{
		SavedStateTDTM st = new SavedStateTDTM(super.onSaveInstanceState());
		st.value = getValue();
		if(st.value==null) st.value="";
		return st;
	}

	@Override
	public void onRestoreInstanceState(Parcelable state)
	{
		if (state == null || !(state instanceof SavedStateTDTM))
		{
			super.onRestoreInstanceState(state);
			return;
		}

		SavedStateTDTM ss = (SavedStateTDTM) state;
		super.onRestoreInstanceState(ss.getSuperState());
		setValue(ss.value);
	};
	
}
