package org.ntlab.acanthus_client.views.animation;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.os.Handler;
import android.os.Looper;
import android.util.AttributeSet;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;

import org.ntlab.acanthus_client.Acanthus;
import org.ntlab.acanthus_client.R;

import java.sql.Array;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;

public class AnimationCanvas extends View {
    private Acanthus acanthus;
    private AnimationViewModel animationViewModel = new AnimationViewModel();
    private Paint paint = new Paint();

    //タイマー用の変数
    private Timer timer;
    private CountUpTimerTask timerTask;
    private Handler handler = new Handler(Looper.getMainLooper());
    private int msec = 1000;

    //ページ指定用の変数
    private int pageNo = 0;

    private ArrayList<Bitmap> bmp = new ArrayList<>();
    private ArrayList<Bitmap> tmp = new ArrayList<>();

    private ImageView imageView;

    public AnimationCanvas(Context context, AttributeSet attrs) {
        super(context, attrs);

        //画像を読み込む
        tmp.add(BitmapFactory.decodeResource(getResources(), R.drawable.sample1));
        tmp.add(BitmapFactory.decodeResource(getResources(), R.drawable.sample2));
        tmp.add(BitmapFactory.decodeResource(getResources(), R.drawable.sample3));
        tmp.add(BitmapFactory.decodeResource(getResources(), R.drawable.sample4));
        tmp.add(BitmapFactory.decodeResource(getResources(), R.drawable.sample5));

        //画像サイズを画面サイズにセット
        WindowManager wm =(WindowManager)context.getSystemService(Context.WINDOW_SERVICE) ;
        Display display = wm.getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        setSize(size.x, size.y);

    }

    //画像サイズの変更
    private void setSize(int width, int height){
        for(int i = 0; i < tmp.size(); i++) {
            bmp.add(Bitmap.createScaledBitmap(tmp.get(i), width, height, false));
        }
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //ダミーです。
        //画面遷移
        canvas.drawBitmap(bmp.get(pageNo),0,0, paint);


    }

    //アニメーションの再生停止
    public int onClickPlayback(){
        int num = 0;
        if(timer != null){
            //timerの終了
            timer.cancel();
            timer = null;
            num = 0;
        }
        else{
            //timerの生成
            this.timer = new Timer();
            this.timerTask = new CountUpTimerTask();
            this.timer.schedule(timerTask,0, this.msec);//スケジュールを100ms毎に設定する。
            num = 1;
        }
        return num;
    }

    //ページを進める
    class CountUpTimerTask extends TimerTask{
        @Override
        public void run(){
            handler.post(new Runnable(){
                public void run(){
                    //ループする
                    pageNo = (pageNo + 1) % bmp.size();

                    //ループさせない
                    /*
                    if(timer != null) onClickPlayback();
                    this.pageNo = bmp.size() - 1;
                     */
                    postInvalidate();
                }
            });
        }
    }

    //最初のページに戻す。
    public void resetAnimationPage(){
        this.pageNo = 0;
        postInvalidate();
    }


    //再生速度の変更
    public  void setAnimationSpeed(float speed){
        this.msec *= speed;
    }

    //2秒スキップ
    public void setAnimationSkip(int x){
        this.pageNo += x * 2000 / this.msec;
        if(this.pageNo < 0) this.pageNo = 0;
        else if(this.pageNo >= bmp.size()) this.pageNo = bmp.size() - 1;
        /*else if(this.pageNo >= bmp.size()) {
            if(timer != null) onClickPlayback();
            this.pageNo = bmp.size() - 1;
        }*/
        postInvalidate();
    }

}
