import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, CreateDateColumn, JoinColumn, UpdateDateColumn, DeleteDateColumn } from 'typeorm';
import { Users } from './users.entity';
import { Plan } from './plan.entity';
import { Subscription } from './subscription.entity';
import { interval } from 'rxjs';

export enum SubscriptionHistoryStatus {
    PENDING = 'pending',
    ACTIVE = 'active',
    INCOMPLETE = 'incomplete',
    PAST_DUE = 'past_due',
    CANCELED = 'canceled',
    UNPAID = 'unpaid',
    UPCOMING = 'upcoming',
}

@Entity('subscription-history')
export class SubscriptionHistory {
    @PrimaryGeneratedColumn('uuid')
    id: string;

    @ManyToOne(() => Subscription, (sub) => sub.subscription_history, {
        onDelete: 'CASCADE',
    })
    subsciption: Subscription;

    @ManyToOne(() => Plan, (plan) => plan.id, {
        onDelete: 'CASCADE',
    })
    plan: Plan;

    @Column({ nullable: true })
    stripe_subscription_id: string;

    @Column({
        type: 'enum',
        enum: SubscriptionHistoryStatus,
        default: SubscriptionHistoryStatus.PENDING,
    })
    status: string;

    @Column({ nullable: true })
    start_date: string;

    @Column({ nullable: true })
    end_date: string;

    @Column({ type: 'jsonb', nullable: true })
    payment_response: Record<string, any>;

    @Column({ type: 'text', nullable: true, comment: "INVOICE PATH" })
    invoice_receipt: string;

    @Column({ type: "decimal", precision: 10, scale: 2, default: 0.00, comment: "STRIPE EXCHANGE RATE" })
    exchange_rate: number

    @Column({ type: "decimal", precision: 10, scale: 2, default: 0.00, comment: "STRIPE TRANSACTION FEE" })
    transaction_fee_usd: number

    @Column({ type: "decimal", precision: 10, scale: 2, default: 0.00, comment: "PLAN AMOUNT" })
    amount_usd: number

    @Column({ type: "decimal", precision: 10, scale: 2, default: 0.00, comment: "FINAL AMOUNT" })
    final_amount: number

    @Column({ nullable: true })
    interval: string;

    @CreateDateColumn({
        type: 'timestamp',
        precision: 0,
        default: () => 'CURRENT_TIMESTAMP',
    })
    created_at: Date;

    @DeleteDateColumn({ type: 'timestamp', nullable: true, precision: 0 })
    deleted_at: Date;

}